aboutsummaryrefslogtreecommitdiff
path: root/libbb/executable.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-02-13 09:44:44 +0000
committerRon Yorston <rmy@pobox.com>2018-02-13 09:44:44 +0000
commitdc19a361bd6c6df30338371532691bbc7f7126bb (patch)
tree1fb2cd646d54b5f8e425c4f11f3e09fc21d1966b /libbb/executable.c
parent096aee2bb468d1ab044de36e176ed1f6c7e3674d (diff)
parent3459024bf404af814cacfe90a0deb719e282ae62 (diff)
downloadbusybox-w32-dc19a361bd6c6df30338371532691bbc7f7126bb.tar.gz
busybox-w32-dc19a361bd6c6df30338371532691bbc7f7126bb.tar.bz2
busybox-w32-dc19a361bd6c6df30338371532691bbc7f7126bb.zip
Merge branch 'busybox' into merge
Diffstat (limited to 'libbb/executable.c')
-rw-r--r--libbb/executable.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/libbb/executable.c b/libbb/executable.c
index b28f020e0..8e2f99732 100644
--- a/libbb/executable.c
+++ b/libbb/executable.c
@@ -25,7 +25,8 @@ int FAST_FUNC file_is_executable(const char *name)
25 * you may call find_executable again with this PATHp to continue 25 * you may call find_executable again with this PATHp to continue
26 * (if it's not NULL). 26 * (if it's not NULL).
27 * return NULL otherwise; (PATHp is undefined) 27 * return NULL otherwise; (PATHp is undefined)
28 * in all cases (*PATHp) contents will be trashed (s/:/NUL/). 28 * in all cases (*PATHp) contents are temporarily modified
29 * but are restored on return (s/:/NUL/ and back).
29 */ 30 */
30#if !ENABLE_PLATFORM_MINGW32 31#if !ENABLE_PLATFORM_MINGW32
31#define next_path_sep(s) strchr(s, ':') 32#define next_path_sep(s) strchr(s, ':')
@@ -48,14 +49,30 @@ char* FAST_FUNC find_executable(const char *filename, char **PATHp)
48 49
49 p = *PATHp; 50 p = *PATHp;
50 while (p) { 51 while (p) {
52 int ex;
53#if ENABLE_PLATFORM_MINGW32
54 char sep;
55
51 n = (char*)next_path_sep(p); 56 n = (char*)next_path_sep(p);
52 if (n) 57 if (n) {
53 *n++ = '\0'; 58 sep = *n;
59 *n = '\0';
60 }
61#else
62 n = strchr(p, ':');
63 if (n) *n = '\0';
64#endif
54 p = concat_path_file( 65 p = concat_path_file(
55 p[0] ? p : ".", /* handle "::" case */ 66 p[0] ? p : ".", /* handle "::" case */
56 filename 67 filename
57 ); 68 );
58 if (file_is_executable(p)) { 69 ex = file_is_executable(p);
70#if ENABLE_PLATFORM_MINGW32
71 if (n) *n++ = sep;
72#else
73 if (n) *n++ = ':';
74#endif
75 if (ex) {
59 *PATHp = n; 76 *PATHp = n;
60 return p; 77 return p;
61 } 78 }
@@ -78,10 +95,8 @@ char* FAST_FUNC find_executable(const char *filename, char **PATHp)
78 */ 95 */
79int FAST_FUNC executable_exists(const char *filename) 96int FAST_FUNC executable_exists(const char *filename)
80{ 97{
81 char *path = xstrdup(getenv("PATH")); 98 char *path = getenv("PATH");
82 char *tmp = path; 99 char *ret = find_executable(filename, &path);
83 char *ret = find_executable(filename, &tmp);
84 free(path);
85 free(ret); 100 free(ret);
86 return ret != NULL; 101 return ret != NULL;
87} 102}