From: Andrew Innes Date: Mon, 28 Dec 1998 19:25:28 +0000 (+0000) Subject: (spawn): Pass directory for child as parameter. X-Git-Tag: emacs-20.4~1002 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d78e84f792e68c4db0e775a977c70e09871d23e1;p=emacs.git (spawn): Pass directory for child as parameter. (main): Save startup directory to give to spawn, then change directory to location of .exe in order not to prevent startup directory from being deleted. --- diff --git a/nt/cmdproxy.c b/nt/cmdproxy.c index ce72ba129c9..0ca57abb5ca 100644 --- a/nt/cmdproxy.c +++ b/nt/cmdproxy.c @@ -369,7 +369,7 @@ console_event_handler (DWORD event) /* Change from normal usage; return value indicates whether spawn succeeded or failed - program return code is returned separately. */ int -spawn (char * progname, char * cmdline, int * retcode) +spawn (char * progname, char * cmdline, char * dir, int * retcode) { BOOL success = FALSE; SECURITY_ATTRIBUTES sec_attrs; @@ -388,7 +388,7 @@ spawn (char * progname, char * cmdline, int * retcode) start.cb = sizeof (start); if (CreateProcess (progname, cmdline, &sec_attrs, NULL, TRUE, - 0, envblock, NULL, &start, &child)) + 0, envblock, dir, &start, &child)) { success = TRUE; /* wait for completion and pass on return code */ @@ -432,12 +432,16 @@ main (int argc, char ** argv) int num_pass_through_args; char modname[MAX_PATH]; char path[MAX_PATH]; + char dir[MAX_PATH]; interactive = TRUE; SetConsoleCtrlHandler ((PHANDLER_ROUTINE) console_event_handler, TRUE); + if (!GetCurrentDirectory (sizeof (dir), dir)) + fail ("error: GetCurrentDirectory failed\n"); + /* We serve double duty: we can be called either as a proxy for the real shell (that is, because we are defined to be the user shell), or in our role as a helper application for running DOS programs. @@ -453,6 +457,13 @@ main (int argc, char ** argv) if (!GetModuleFileName (NULL, modname, sizeof (modname))) fail ("error: GetModuleFileName failed\n"); + /* Change directory to location of .exe so startup directory can be + deleted. */ + progname = strrchr (modname, '\\'); + *progname = '\0'; + SetCurrentDirectory (modname); + *progname = '\\'; + /* 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. */ @@ -462,7 +473,7 @@ main (int argc, char ** argv) /* We are being used as a helper to run a DOS app; just pass command line to DOS app without change. */ /* TODO: fill in progname. */ - if (spawn (NULL, GetCommandLine (), &rc)) + if (spawn (NULL, GetCommandLine (), dir, &rc)) return rc; fail ("Could not run %s\n", GetCommandLine ()); } @@ -670,7 +681,7 @@ main (int argc, char ** argv) if (!cmdline) cmdline = progname; - if (spawn (progname, cmdline, &rc)) + if (spawn (progname, cmdline, dir, &rc)) return rc; if (!need_shell)