From 057b35a099f05ecc348479bb573617aa9cf1241c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 15 Mar 2000 11:44:17 +0000 Subject: [PATCH] (read_history_range, history_truncate_file, history_do_write) [__MSDOS__]: Allow for a `_' to replace the leading dot in hard-wrired file names. --- readline/histfile.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/readline/histfile.c b/readline/histfile.c index 3325b7fc1f7..9437e992566 100644 --- a/readline/histfile.c +++ b/readline/histfile.c @@ -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) -- 2.30.2