summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2001-12-03 09:52:10 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2001-12-03 09:52:10 +0000
commite5bfb1566c26d214a3d1131581a2d633521d45ad (patch)
tree48fad3f5b6d264791a697a8d75a511f30cb2a9ea
parentefcdf92b6b9933557168281eb3726b076a0879b6 (diff)
Mauvaise expansion de dir/pattern (PR#680)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4067 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--byterun/win32.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/byterun/win32.c b/byterun/win32.c
index bd82ca699..8a14fdefd 100644
--- a/byterun/win32.c
+++ b/byterun/win32.c
@@ -237,14 +237,23 @@ static void expand_pattern(char * pat)
{
int handle;
struct _finddata_t ffblk;
+ int preflen;
handle = _findfirst(pat, &ffblk);
if (handle == -1) {
store_argument(pat); /* a la Bourne shell */
return;
}
+ for (preflen = strlen(pat); preflen > 0; preflen--) {
+ char c = pat[preflen - 1];
+ if (c == '\\' || c == '/' || c == ':') break;
+ }
do {
- store_argument(strdup(ffblk.name));
+ char * name = malloc(preflen + strlen(ffblk.name) + 1);
+ if (name == NULL) out_of_memory();
+ memcpy(name, pat, preflen);
+ strcpy(name + preflen, ffblk.name);
+ store_argument(name);
} while (_findnext(handle, &ffblk) != -1);
_findclose(handle);
}