aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2015-06-05 14:55:45 +0100
committerRon Yorston <rmy@pobox.com>2015-06-05 15:41:40 +0100
commit0ccf7a03aa45889993716581d675616db633ed33 (patch)
treebea4cc3a2d5e10575f60b60ff647daf06a433ebb /shell
parent57e14f8704700ee39855698238d7e397e770332d (diff)
downloadbusybox-w32-0ccf7a03aa45889993716581d675616db633ed33.tar.gz
busybox-w32-0ccf7a03aa45889993716581d675616db633ed33.tar.bz2
busybox-w32-0ccf7a03aa45889993716581d675616db633ed33.zip
ash: add winxp option
In some circumstances Windows XP and Windows Server 2003 seem to dislike environment variables with backslashes in paths. The 'winxp' option prevents BusyBox from changing backslashes to slashes in the environment. Although the option can be managed by the 'set' builtin it only works if '-X' is given as the first argument to the shell.
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 0d188e1e6..afa9f271b 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -297,6 +297,7 @@ static const char *const optletters_optnames[] = {
297#endif 297#endif
298#if ENABLE_PLATFORM_MINGW32 298#if ENABLE_PLATFORM_MINGW32
299 ,"\0" "noconsole" 299 ,"\0" "noconsole"
300 ,"X" "winxp"
300#endif 301#endif
301}; 302};
302 303
@@ -380,6 +381,7 @@ struct globals_misc {
380#endif 381#endif
381#if ENABLE_PLATFORM_MINGW32 382#if ENABLE_PLATFORM_MINGW32
382# define noconsole optlist[14 + ENABLE_ASH_BASH_COMPAT + 2*DEBUG] 383# define noconsole optlist[14 + ENABLE_ASH_BASH_COMPAT + 2*DEBUG]
384# define winxp optlist[15 + ENABLE_ASH_BASH_COMPAT + 2*DEBUG]
383#endif 385#endif
384 386
385 /* trap handler commands */ 387 /* trap handler commands */
@@ -13453,7 +13455,11 @@ exitshell(void)
13453} 13455}
13454 13456
13455static void 13457static void
13458#if ENABLE_PLATFORM_MINGW32
13459init(int xp)
13460#else
13456init(void) 13461init(void)
13462#endif
13457{ 13463{
13458 /* from input.c: */ 13464 /* from input.c: */
13459 /* we will never free this */ 13465 /* we will never free this */
@@ -13502,8 +13508,7 @@ init(void)
13502 struct passwd *pw; 13508 struct passwd *pw;
13503 13509
13504 for (envp = environ; envp && *envp; envp++) { 13510 for (envp = environ; envp && *envp; envp++) {
13505 end = strchr(*envp, '='); 13511 if (!(end=strchr(*envp, '=')))
13506 if (!end)
13507 continue; 13512 continue;
13508 13513
13509 /* make all variable names uppercase */ 13514 /* make all variable names uppercase */
@@ -13511,9 +13516,11 @@ init(void)
13511 *start = toupper(*start); 13516 *start = toupper(*start);
13512 13517
13513 /* convert backslashes to forward slashes */ 13518 /* convert backslashes to forward slashes */
13514 for ( ++end; *end; ++end ) { 13519 if (!xp) {
13515 if ( *end == '\\' ) { 13520 for ( ++end; *end; ++end ) {
13516 *end = '/'; 13521 if ( *end == '\\' ) {
13522 *end = '/';
13523 }
13517 } 13524 }
13518 } 13525 }
13519 } 13526 }
@@ -13739,7 +13746,7 @@ int ash_main(int argc UNUSED_PARAM, char **argv)
13739#endif 13746#endif
13740 rootpid = getpid(); 13747 rootpid = getpid();
13741 13748
13742 init(); 13749 init(IF_PLATFORM_MINGW32(argc >= 2 && strcmp(argv[1], "-X") == 0));
13743 setstackmark(&smark); 13750 setstackmark(&smark);
13744 13751
13745#if ENABLE_PLATFORM_MINGW32 13752#if ENABLE_PLATFORM_MINGW32