(read_history_range, history_truncate_file, history_do_write) [__MSDOS__]:
authorEli Zaretskii <eliz@gnu.org>
Wed, 15 Mar 2000 11:44:17 +0000 (11:44 +0000)
committerEli Zaretskii <eliz@gnu.org>
Wed, 15 Mar 2000 11:44:17 +0000 (11:44 +0000)
Allow for a `_' to replace the leading dot in hard-wrired file names.

readline/histfile.c

index 3325b7fc1f7193c4dbea6c32026db3b95c035582..9437e992566dd3c1610dc187d2125bdf4921a8cc 100644 (file)
@@ -140,6 +140,16 @@ read_history_range (filename, from, to)
   input = history_filename (filename);
   file = open (input, O_RDONLY|O_BINARY, 0666);
 
+
+#ifdef __MSDOS__
+  /* MSDOS doesn't allow leading dots in file names.  Try again
+     with the dot replaced by an underscore.  */
+  if (file < 0 && !filename)
+    {
+      input[strlen (input) - 8] = '_';
+      file = open (input, O_RDONLY|O_BINARY, 0666);
+    }
+#endif
   if ((file < 0) || (fstat (file, &finfo) == -1))
     goto error_and_exit;
 
@@ -233,6 +243,16 @@ history_truncate_file (fname, lines)
   filename = history_filename (fname);
   file = open (filename, O_RDONLY|O_BINARY, 0666);
 
+#ifdef __MSDOS__
+  /* MSDOS doesn't allow leading dots in file names.  Try again
+     with the dot replaced by an underscore.  */
+  if (file < 0 && !fname)
+    {
+      filename[strlen (filename) - 8] = '_';
+      file = open (filename, O_RDONLY|O_BINARY, 0666);
+    }
+#endif
+
   if (file == -1 || fstat (file, &finfo) == -1)
     goto truncate_exit;
 
@@ -314,8 +334,23 @@ history_do_write (filename, nelements, overwrite)
 
   if ((file = open (output, mode, 0600)) == -1)
     {
+#ifdef __MSDOS__
+      /* MSDOS doesn't allow leading dots in file names.  If this is
+        the default file name, try again with the dot replaced by an
+        underscore.  */
+      if (!filename)
+       {
+         output[strlen (output) - 8] = '_';
+         if ((file = open (output, mode, 0600)) == -1)
+           {
+             FREE (output);
+             return (errno);
+           }
+       }
+#else
       FREE (output);
       return (errno);
+#endif
     }
 
   if (nelements > history_length)