aboutsummaryrefslogtreecommitdiff
path: root/libbb/executable.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-12-14 15:27:54 +0000
committerRon Yorston <rmy@pobox.com>2018-12-14 17:41:29 +0000
commita236242374daf911a01e998fabb1cc1268b2be7b (patch)
tree5e30a868b8580a645f94003e27bf96d6ebcd0ee1 /libbb/executable.c
parent575581082befff0e049ef67fa36bbdd2ca737e29 (diff)
downloadbusybox-w32-a236242374daf911a01e998fabb1cc1268b2be7b.tar.gz
busybox-w32-a236242374daf911a01e998fabb1cc1268b2be7b.tar.bz2
busybox-w32-a236242374daf911a01e998fabb1cc1268b2be7b.zip
win32: special treatment for PATH
The PATH shell variable is a special case. It can be exported to the environment where it might be interpreted by native applications which assume the separator is ';'. Hence: - require that the separator used in PATH is ';' - enforce this by intercepting calls to setvareq() that set PATH and adjusting its value if necessary. As a result of this the code to parse PATH can be simplified by replacing the hardcoded Unix ':' path separator by the platform- dependent macro PATH_SEP. The MANPATH variable is also required to use ';' as its separator but since it's less likely to be used this isn't enforced.
Diffstat (limited to 'libbb/executable.c')
-rw-r--r--libbb/executable.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/libbb/executable.c b/libbb/executable.c
index 835341ed9..87a40eeda 100644
--- a/libbb/executable.c
+++ b/libbb/executable.c
@@ -40,28 +40,21 @@ char* FAST_FUNC find_executable(const char *filename, char **PATHp)
40 */ 40 */
41 char *p, *n; 41 char *p, *n;
42#if ENABLE_PLATFORM_MINGW32 42#if ENABLE_PLATFORM_MINGW32
43 char sep, *w; 43 char *w;
44#endif 44#endif
45 45
46 p = *PATHp; 46 p = *PATHp;
47 while (p) { 47 while (p) {
48 int ex; 48 int ex;
49 49
50#if !ENABLE_PLATFORM_MINGW32 50 n = strchr(p, PATH_SEP);
51 n = strchr(p, ':');
52 if (n) *n = '\0'; 51 if (n) *n = '\0';
53#else
54 n = (char*)next_path_sep(p);
55 if (n) { sep = *n; *n = '\0'; }
56#endif
57 p = concat_path_file( 52 p = concat_path_file(
58 p[0] ? p : ".", /* handle "::" case */ 53 p[0] ? p : ".", /* handle "::" case */
59 filename 54 filename
60 ); 55 );
61#if !ENABLE_PLATFORM_MINGW32 56 if (n) *n++ = PATH_SEP;
62 if (n) *n++ = ':'; 57#if ENABLE_PLATFORM_MINGW32
63#else
64 if (n) *n++ = sep;
65 if ((w=alloc_win32_extension(p))) { 58 if ((w=alloc_win32_extension(p))) {
66 free(p); 59 free(p);
67 p = w; 60 p = w;