changeset 4733:a5210e70ffbe

No need to fatal () on startup if $PWD doesn't exist; chdir to "/" instead. src/ChangeLog addition: 2009-11-08 Aidan Kehoe <kehoea@parhasard.net> * sysfile.h (DEFAULT_DIRECTORY_FALLBACK): New #define, "/" on Unix and "C:\\" on Win32 native, a directory that should "always" be available. * fileio.c (Fexpand_file_name): Use DEFAULT_DIRECTORY_FALLBACK here, instead of conditionalising on WIN32_NATIVE. * editfns.c (get_home_directory): Use DEFAULT_DIRECTORY_FALLBACK if looking up the home directory fails, on both Windows and Unix. * buffer.c (init_initial_directory): Don't give a fatal error if the current directory doesn't exist, chdir to DEFAULT_DIRECTORY_FALLBACK instead.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 08 Nov 2009 17:27:26 +0000
parents 2491a837112c
children 74a5eaa67982
files src/ChangeLog src/buffer.c src/editfns.c src/fileio.c src/sysfile.h
diffstat 5 files changed, 37 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Nov 02 14:00:49 2009 +0900
+++ b/src/ChangeLog	Sun Nov 08 17:27:26 2009 +0000
@@ -1,3 +1,17 @@
+2009-11-08  Aidan Kehoe  <kehoea@parhasard.net>
+
+	* sysfile.h (DEFAULT_DIRECTORY_FALLBACK):
+	New #define, "/" on Unix and "C:\\" on Win32 native, a directory
+	that should "always" be available.
+	* fileio.c (Fexpand_file_name): Use DEFAULT_DIRECTORY_FALLBACK
+	here, instead of conditionalising on WIN32_NATIVE.
+	* editfns.c (get_home_directory):
+	Use DEFAULT_DIRECTORY_FALLBACK if looking up the home directory
+	fails, on both Windows and Unix.
+	* buffer.c (init_initial_directory):
+	Don't give a fatal error if the current directory doesn't exist,
+	chdir to DEFAULT_DIRECTORY_FALLBACK instead.
+
 2009-11-02  Stephen Turnbull  <stephen@xemacs.org>
 
 	Fix issue145.
--- a/src/buffer.c	Mon Nov 02 14:00:49 2009 +0900
+++ b/src/buffer.c	Sun Nov 08 17:27:26 2009 +0000
@@ -2926,7 +2926,19 @@
       {
 	Ibyte *errmess;
 	GET_STRERROR (errmess, errno);
-	fatal ("`getcwd' failed: %s\n", errmess);
+	stderr_out ("`getcwd' failed: %s: changing default directory to %s\n",
+                    errmess, DEFAULT_DIRECTORY_FALLBACK);
+
+        if (qxe_chdir (DEFAULT_DIRECTORY_FALLBACK) < 0)
+          {
+            GET_STRERROR (errmess, errno);
+
+            fatal ("could not `chdir' to `%s': %s\n",
+                   DEFAULT_DIRECTORY_FALLBACK, errmess);
+          }
+
+        initial_directory = qxe_allocating_getcwd();
+        assert (initial_directory != NULL);
       }
 
   /* Make sure pwd is DIRECTORY_SEP-terminated.
--- a/src/editfns.c	Mon Nov 02 14:00:49 2009 +0900
+++ b/src/editfns.c	Sun Nov 08 17:27:26 2009 +0000
@@ -862,20 +862,15 @@
 			  homepath);
 	    }
 	  else
+#endif	/* !WIN32_NATIVE */
 	    {
-	      cached_home_directory = qxestrdup ((Ibyte *) "C:\\");
+              /* Unix, typically.
+                 Using "/" isn't quite right, but what should we do?
+                 We probably should try to extract pw_dir from /etc/passwd,
+                 before falling back to this. */
+	      cached_home_directory = qxestrdup (DEFAULT_DIRECTORY_FALLBACK);
 	      output_home_warning = 1;
 	    }
-#else	/* !WIN32_NATIVE */
-	  /*
-	   * Unix, typically.
-	   * Using "/" isn't quite right, but what should we do?
-	   * We probably should try to extract pw_dir from /etc/passwd,
-	   * before falling back to this.
-	   */
-	  cached_home_directory = qxestrdup ((Ibyte *) "/");
-	  output_home_warning = 1;
-#endif	/* !WIN32_NATIVE */
 	}
       if (initialized && output_home_warning)
 	{
--- a/src/fileio.c	Mon Nov 02 14:00:49 2009 +0900
+++ b/src/fileio.c	Sun Nov 08 17:27:26 2009 +0000
@@ -790,11 +790,7 @@
   if (NILP (default_directory))
     default_directory = current_buffer->directory;
   if (! STRINGP (default_directory))
-#ifdef WIN32_NATIVE
-    default_directory = build_string ("C:\\");
-#else
-    default_directory = build_string ("/");
-#endif
+    default_directory = build_string (DEFAULT_DIRECTORY_FALLBACK);
 
   if (!NILP (default_directory))
     {
--- a/src/sysfile.h	Mon Nov 02 14:00:49 2009 +0900
+++ b/src/sysfile.h	Sun Nov 08 17:27:26 2009 +0000
@@ -490,6 +490,8 @@
 /* The above Lisp variables are not available to make-docfile, etc. */
 #define DIRECTORY_SEP DEFAULT_DIRECTORY_SEP
 
+#define DEFAULT_DIRECTORY_FALLBACK ((Ibyte *)"C:\\")
+
 #endif /* emacs */
 
 #else /* not WIN32_NATIVE */
@@ -497,6 +499,7 @@
 #define SEPCHAR ':'
 #define DEFAULT_DIRECTORY_SEP '/'
 #define DIRECTORY_SEP '/'
+#define DEFAULT_DIRECTORY_FALLBACK ((Ibyte *)"/")
 
 #endif /* WIN32_NATIVE */