]> git.eshelyaron.com Git - emacs.git/commitdiff
don't ignore chdir failure
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 6 Feb 2011 01:25:41 +0000 (17:25 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 6 Feb 2011 01:25:41 +0000 (17:25 -0800)
* sysdep.c (sys_subshell) [!defined DOS_NT]: Diagnose chdir
failure and exit.
(sys_subshell) [defined DOS_NT]: Mark with a FIXME the two
remaining unchecked chdir calls in this function; some DOS/NT
expert needs to fix them.
* emacs.c (main): Mark with a FIXME the unchecked chdir calls
in this function; some NextStep expert needs to fix them.

src/ChangeLog
src/emacs.c
src/sysdep.c

index d757a89836d72b2b75e4b7e8411a079711a264ec..1210b48d98f59366cac1b24a74593de6e55e072d 100644 (file)
@@ -1,3 +1,14 @@
+2011-02-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+       don't ignore chdir failure
+       * sysdep.c (sys_subshell) [!defined DOS_NT]: Diagnose chdir
+       failure and exit.
+       (sys_subshell) [defined DOS_NT]: Mark with a FIXME the two
+       remaining unchecked chdir calls in this function; some DOS/NT
+       expert needs to fix them.
+       * emacs.c (main): Mark with a FIXME the unchecked chdir calls
+       in this function; some NextStep expert needs to fix them.
+
 2011-02-05  Glenn Morris  <rgm@gnu.org>
 
        * xfaces.c (Finternal_set_lisp_face_attribute):
index 53786b0adae7e92c2c551386fca8e35b6e3e5a2c..4455e6b4d9fb4f0c8be9da68e06a8eb300e162fa 100644 (file)
@@ -1296,6 +1296,8 @@ main (int argc, char **argv)
 #ifdef NS_IMPL_COCOA
       if (skip_args < argc)
         {
+         /* FIXME: Do the right thing if getenv returns NULL, or if
+            chdir fails.  */
           if (!strncmp(argv[skip_args], "-psn", 4))
             {
               skip_args += 1;
index 53b7f39171e817e5f9d76ce205ac762a2288f31b..5760d0224eba6c32e43b9683172cd81228eb8488 100644 (file)
@@ -548,8 +548,13 @@ sys_subshell (void)
        sh = "sh";
 
       /* Use our buffer's default directory for the subshell.  */
-      if (str)
-       chdir ((char *) str);
+      if (str && chdir ((char *) str) != 0)
+       {
+#ifndef DOS_NT
+         ignore_value (write (1, "Can't chdir\n", 12));
+         _exit (1);
+#endif
+       }
 
       close_process_descs ();  /* Close Emacs's pipes/ptys */
 
@@ -567,7 +572,7 @@ sys_subshell (void)
            setenv ("PWD", str, 1);
          }
        st = system (sh);
-       chdir (oldwd);
+       chdir (oldwd);  /* FIXME: Do the right thing on chdir failure.  */
        if (epwd)
          putenv (old_pwd);     /* restore previous value */
       }
@@ -575,7 +580,7 @@ sys_subshell (void)
 #ifdef  WINDOWSNT
       /* Waits for process completion */
       pid = _spawnlp (_P_WAIT, sh, sh, NULL);
-      chdir (oldwd);
+      chdir (oldwd);   /* FIXME: Do the right thing on chdir failure.  */
       if (pid == -1)
        write (1, "Can't execute subshell", 22);
 #else   /* not WINDOWSNT */