summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);
}