From a878555182908d9daa090e5c61ff95147c2b9df4 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 24 Sep 1996 19:40:24 +0000 Subject: [PATCH] (run_msdos_command): When testing whether a shell belongs to the MSDOS family, convert its name to lower-case. --- src/msdos.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/msdos.c b/src/msdos.c index 99695db3329..2f19901a20f 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -2682,7 +2682,7 @@ run_msdos_command (argv, dir, tempin, tempout, temperr) Lisp_Object dir; int tempin, tempout, temperr; { - char *saveargv1, *saveargv2, **envv; + char *saveargv1, *saveargv2, **envv, *lowcase_argv0, *pa, *pl; char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ int msshell, result = -1; int in, out, inbak, outbak, errbak; @@ -2692,7 +2692,19 @@ run_msdos_command (argv, dir, tempin, tempout, temperr) /* Get current directory as MSDOS cwd is not per-process. */ getwd (oldwd); - cmd = Ffile_name_nondirectory (build_string (argv[0])); + /* If argv[0] is the shell, it might come in any lettercase. + Since `Fmember' is case-sensitive, we need to downcase + argv[0], even if we are on case-preserving filesystems. */ + lowcase_argv0 = alloca (strlen (argv[0]) + 1); + for (pa = argv[0], pl = lowcase_argv0; *pa; pl++) + { + *pl = *pa++; + if (*pl >= 'A' && *pl <= 'Z') + *pl += 'a' - 'A'; + } + *pl = '\0'; + + cmd = Ffile_name_nondirectory (build_string (lowcase_argv0)); msshell = !NILP (Fmember (cmd, Fsymbol_value (intern ("msdos-shells")))) && !strcmp ("-c", argv[1]); if (msshell) -- 2.39.2