X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3cd37c4cacffb691744d8f398d4b5d65cf46d3fb..937640a621a4ce2e5e56eaecca37a2a28a584318:/nt/cmdproxy.c diff --git a/nt/cmdproxy.c b/nt/cmdproxy.c index 16f24065d0..52760402f1 100644 --- a/nt/cmdproxy.c +++ b/nt/cmdproxy.c @@ -158,6 +158,7 @@ get_next_token (char * buf, char ** pSrc) if (p[0] == escape_char && escape_char != '"') { escape_char_run++; + p++; continue; } else if (p[0] == '"') @@ -229,7 +230,7 @@ search_dir (char *dir, char *exec, int bufsize, char *buffer) int i, rc; /* Search the directory for the program. */ - for (i = 0; i < n_exts; i++) + for (i = 0; i < n_exts; i++) { rc = SearchPath (dir, exec, exts[i], bufsize, buffer, &dummy); if (rc > 0) @@ -239,7 +240,7 @@ search_dir (char *dir, char *exec, int bufsize, char *buffer) return 0; } -/* Return the absolute name of executable file PROG, including +/* Return the absolute name of executable file PROG, including any file extensions. If an absolute name for PROG cannot be found, return NULL. */ char * @@ -271,18 +272,18 @@ make_absolute (char *prog) return NULL; } - if (GetCurrentDirectory (MAX_PATH, curdir) <= 0) + if (GetCurrentDirectory (MAX_PATH, curdir) <= 0) return NULL; /* Relative path; search in current dir. */ - if (strpbrk (prog, "\\")) + if (strpbrk (prog, "\\")) { if (search_dir (curdir, prog, MAX_PATH, absname) > 0) return strdup (absname); - else + else return NULL; } - + /* Just filename; search current directory then PATH. */ path = alloca (strlen (getenv ("PATH")) + strlen (curdir) + 2); strcpy (path, curdir); @@ -303,7 +304,7 @@ make_absolute (char *prog) /* Move to the next directory. */ path = p + 1; - } + } return NULL; } @@ -321,7 +322,7 @@ setup_argv (void) char * cmdline = GetCommandLine (); int arg_bytes = 0; - + } #endif @@ -383,7 +384,7 @@ spawn (char * progname, char * cmdline, char * dir, int * retcode) sec_attrs.nLength = sizeof (sec_attrs); sec_attrs.lpSecurityDescriptor = NULL; sec_attrs.bInheritHandle = FALSE; - + memset (&start, 0, sizeof (start)); start.cb = sizeof (start); @@ -466,8 +467,12 @@ main (int argc, char ** argv) /* Although Emacs always sets argv[0] to an absolute pathname, we might get run in other ways as well, so convert argv[0] to an - absolute name before comparing to the module name. */ + absolute name before comparing to the module name. Don't get + caught out by mixed short and long names. */ + GetShortPathName (modname, modname, sizeof (modname)); + path[0] = '\0'; if (!SearchPath (NULL, argv[0], ".exe", sizeof (path), path, &progname) + || !GetShortPathName (path, path, sizeof (path)) || stricmp (modname, path) != 0) { /* We are being used as a helper to run a DOS app; just pass @@ -521,7 +526,7 @@ main (int argc, char ** argv) if (cmdline) warn ("warning: %s ignored because of -c\n", *argv); } - else if (((*argv)[1] == 'e' || (*argv[1]) == 'E') && ((*argv)[2] == ':')) + else if (((*argv)[1] == 'e' || (*argv)[1] == 'E') && ((*argv)[2] == ':')) { int requested_envsize = atoi (*argv + 3); /* Enforce a reasonable minimum size, as above. */ @@ -694,3 +699,6 @@ main (int argc, char ** argv) return 0; } + +/* arch-tag: 88678d93-07ac-4e2f-ad63-d4a740ca69ac + (do not change this comment) */