From f1fe9406fbd5195d5c8b0dbaf0f8dcadf4b6da1e Mon Sep 17 00:00:00 2001 From: eliz 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 | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/readline/histfile.c b/readline/histfile.c index 81dda57d0f..9437e99256 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; @@ -155,7 +165,11 @@ read_history_range (filename, from, to) } buffer = xmalloc (file_size + 1); +#if 0 if (read (file, buffer, file_size) != file_size) +#else + if (read (file, buffer, file_size) < 0) +#endif { error_and_exit: if (file >= 0) @@ -217,7 +231,7 @@ read_history_range (filename, from, to) int history_truncate_file (fname, lines) char *fname; - register int lines; + int lines; { register int i; int file, chars_read; @@ -229,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; @@ -276,6 +300,12 @@ history_truncate_file (fname, lines) if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1)) { write (file, buffer + i, file_size - i); + +#if defined (__BEOS__) + /* BeOS ignores O_TRUNC. */ + ftruncate (file, file_size - i); +#endif + close (file); } @@ -304,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.11.0