diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-09-14 11:01:46 +1000 |
---|---|---|
committer | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-09-14 11:06:23 +1000 |
commit | a102166268ed566d9bcd9884396add2aef5b9dff (patch) | |
tree | 91a63b8f7f9b0e781dd9e6ebd6fc015f48938922 /libbb | |
parent | 185b9604333d74512a36f603164c2c728a166504 (diff) | |
download | busybox-w32-a102166268ed566d9bcd9884396add2aef5b9dff.tar.gz busybox-w32-a102166268ed566d9bcd9884396add2aef5b9dff.tar.bz2 busybox-w32-a102166268ed566d9bcd9884396add2aef5b9dff.zip |
win32: support .com executables
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/execable.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/libbb/execable.c b/libbb/execable.c index 96ce9bfb8..06b1c534b 100644 --- a/libbb/execable.c +++ b/libbb/execable.c | |||
@@ -18,8 +18,11 @@ int FAST_FUNC execable_file(const char *name) | |||
18 | struct stat s; | 18 | struct stat s; |
19 | if (ENABLE_PLATFORM_MINGW32) { | 19 | if (ENABLE_PLATFORM_MINGW32) { |
20 | int len = strlen(name); | 20 | int len = strlen(name); |
21 | return len > 4 && !strcasecmp(name+len-4, ".exe") && | 21 | return len > 4 && |
22 | !stat(name, &s) && S_ISREG(s.st_mode); | 22 | (!strcasecmp(name+len-4, ".exe") || |
23 | !strcasecmp(name+len-4, ".com")) && | ||
24 | !stat(name, &s) && | ||
25 | S_ISREG(s.st_mode); | ||
23 | } | 26 | } |
24 | return (!access(name, X_OK) && !stat(name, &s) && S_ISREG(s.st_mode)); | 27 | return (!access(name, X_OK) && !stat(name, &s) && S_ISREG(s.st_mode)); |
25 | } | 28 | } |
@@ -43,7 +46,7 @@ char* FAST_FUNC find_execable(const char *filename, char **PATHp) | |||
43 | 46 | ||
44 | p = *PATHp; | 47 | p = *PATHp; |
45 | while (p) { | 48 | while (p) { |
46 | n = next_path_sep(p); | 49 | n = (char*)next_path_sep(p); |
47 | if (n) | 50 | if (n) |
48 | *n++ = '\0'; | 51 | *n++ = '\0'; |
49 | if (*p != '\0') { /* it's not a PATH="foo::bar" situation */ | 52 | if (*p != '\0') { /* it's not a PATH="foo::bar" situation */ |
@@ -54,7 +57,9 @@ char* FAST_FUNC find_execable(const char *filename, char **PATHp) | |||
54 | } | 57 | } |
55 | if (ENABLE_PLATFORM_MINGW32) { | 58 | if (ENABLE_PLATFORM_MINGW32) { |
56 | int len = strlen(p); | 59 | int len = strlen(p); |
57 | if (len > 4 && !strcasecmp(p+len-4, ".exe")) | 60 | if (len > 4 && |
61 | (!strcasecmp(p+len-4, ".exe") || | ||
62 | !strcasecmp(p+len-4, ".com"))) | ||
58 | ; /* nothing, already tested by find_execable() */ | 63 | ; /* nothing, already tested by find_execable() */ |
59 | else { | 64 | else { |
60 | char *np = xmalloc(len+4+1); | 65 | char *np = xmalloc(len+4+1); |
@@ -64,6 +69,11 @@ char* FAST_FUNC find_execable(const char *filename, char **PATHp) | |||
64 | *PATHp = n; | 69 | *PATHp = n; |
65 | return np; | 70 | return np; |
66 | } | 71 | } |
72 | memcpy(np+len, ".com", 5); | ||
73 | if (execable_file(np)) { | ||
74 | *PATHp = n; | ||
75 | return np; | ||
76 | } | ||
67 | } | 77 | } |
68 | } | 78 | } |
69 | free(p); | 79 | free(p); |