diff --git a/os2.c b/os2.c index 71d810c..ece459f 100644 --- a/os2.c +++ b/os2.c @@ -31,14 +31,13 @@ #include #include -__RCSID("$MirOS: src/bin/mksh/os2.c,v 1.5 2017/10/13 11:54:06 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/os2.c,v 1.6 2017/10/13 23:34:49 tg Exp $"); static char *remove_trailing_dots(char *); static int access_stat_ex(int (*)(), const char *, void *); static int test_exec_exist(const char *, char *); static void response(int *, const char ***); static char *make_response_file(char * const *); -static void env_slashify(void); static void add_temp(const char *); static void cleanup_temps(void); static void cleanup(void); @@ -170,44 +169,12 @@ init_extlibpath(void) } } -/* - * Convert backslashes of environmental variables to forward slahes. - * A backslash may be used as an escaped character when doing 'echo'. - * This leads to an unexpected behavior. - */ -static void -env_slashify(void) -{ - /* - * PATH and TMPDIR are used by OS/2 as well. That is, they may - * have backslashes as a directory separator. - * BEGINLIBPATH and ENDLIBPATH are special variables on OS/2. - */ - const char *var_list[] = { - "PATH", - "TMPDIR", - "BEGINLIBPATH", - "ENDLIBPATH", - NULL - }; - const char **var; - char *value; - - for (var = var_list; *var; var++) { - value = getenv(*var); - - if (value) - _fnslashify(value); - } -} - void os2_init(int *argcp, const char ***argvp) { response(argcp, argvp); init_extlibpath(); - env_slashify(); if (!isatty(STDIN_FILENO)) setmode(STDIN_FILENO, O_BINARY); diff --git a/var.c b/var.c index a53fae8..ceabba5 100644 --- a/var.c +++ b/var.c @@ -28,7 +28,7 @@ #include #endif -__RCSID("$MirOS: src/bin/mksh/var.c,v 1.220 2017/07/26 23:02:28 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/var.c,v 1.221 2017/10/13 23:34:49 tg Exp $"); /*- * Variables @@ -1294,9 +1294,29 @@ setspec(struct tbl *vp) { mksh_ari_u num; char *s; - int st; + int st = special(vp->name); - switch ((st = special(vp->name))) { +#ifdef MKSH_DOSPATH + switch (st) { + case V_PATH: + case V_TMPDIR: +#ifdef __OS2__ + case V_BEGINLIBPATH: + case V_ENDLIBPATH: +#endif + /* convert backslashes to slashes for convenience */ + if (!(vp->flag&INTEGER)) { + s = str_val(vp); + do { + if (*s == ord('\\')) + *s = '/'; + } while (*s++); + } + break; + } +#endif + + switch (st) { #ifdef __OS2__ case V_BEGINLIBPATH: case V_ENDLIBPATH: