diff options
| author | Ron Yorston <rmy@pobox.com> | 2018-12-14 15:27:54 +0000 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2018-12-14 17:41:29 +0000 |
| commit | a236242374daf911a01e998fabb1cc1268b2be7b (patch) | |
| tree | 5e30a868b8580a645f94003e27bf96d6ebcd0ee1 /libbb/executable.c | |
| parent | 575581082befff0e049ef67fa36bbdd2ca737e29 (diff) | |
| download | busybox-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.c | 15 |
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; |
