From a102166268ed566d9bcd9884396add2aef5b9dff Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Tue, 14 Sep 2010 11:01:46 +1000 Subject: win32: support .com executables --- libbb/execable.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'libbb') 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) struct stat s; if (ENABLE_PLATFORM_MINGW32) { int len = strlen(name); - return len > 4 && !strcasecmp(name+len-4, ".exe") && - !stat(name, &s) && S_ISREG(s.st_mode); + return len > 4 && + (!strcasecmp(name+len-4, ".exe") || + !strcasecmp(name+len-4, ".com")) && + !stat(name, &s) && + S_ISREG(s.st_mode); } return (!access(name, X_OK) && !stat(name, &s) && S_ISREG(s.st_mode)); } @@ -43,7 +46,7 @@ char* FAST_FUNC find_execable(const char *filename, char **PATHp) p = *PATHp; while (p) { - n = next_path_sep(p); + n = (char*)next_path_sep(p); if (n) *n++ = '\0'; 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) } if (ENABLE_PLATFORM_MINGW32) { int len = strlen(p); - if (len > 4 && !strcasecmp(p+len-4, ".exe")) + if (len > 4 && + (!strcasecmp(p+len-4, ".exe") || + !strcasecmp(p+len-4, ".com"))) ; /* nothing, already tested by find_execable() */ else { char *np = xmalloc(len+4+1); @@ -64,6 +69,11 @@ char* FAST_FUNC find_execable(const char *filename, char **PATHp) *PATHp = n; return np; } + memcpy(np+len, ".com", 5); + if (execable_file(np)) { + *PATHp = n; + return np; + } } } free(p); -- cgit v1.2.3-55-g6feb