diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2001-12-03 09:52:10 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2001-12-03 09:52:10 +0000 |
commit | e5bfb1566c26d214a3d1131581a2d633521d45ad (patch) | |
tree | 48fad3f5b6d264791a697a8d75a511f30cb2a9ea | |
parent | efcdf92b6b9933557168281eb3726b076a0879b6 (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.c | 11 |
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); } |