changeset 5044:d0a95d2c44bf

Add fix to readline 7+ windows bug for writing history to existing file * src/readline-2-history.patch * dist-files: added ref to patch
author John Donoghue
date Thu, 04 Apr 2019 11:28:25 -0400
parents ff2697d81659
children d475c9d019f3
files dist-files.mk src/readline-2-history.patch
diffstat 2 files changed, 62 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/dist-files.mk	Mon Apr 01 16:31:34 2019 -0400
+++ b/dist-files.mk	Thu Apr 04 11:28:25 2019 -0400
@@ -637,6 +637,7 @@
   readline-1-input.patch \
   readline-1-sigwinch.patch \
   readline-2-event-hook.patch \
+  readline-2-history.patch \
   readline.mk \
   release-octave-1-gnulib.patch \
   release-octave.mk \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/readline-2-history.patch	Thu Apr 04 11:28:25 2019 -0400
@@ -0,0 +1,61 @@
+diff -ur readline-8.0.eventhook/histfile.c readline-8.0/histfile.c
+--- readline-8.0.eventhook/histfile.c	2019-04-03 10:21:42.916563353 -0400
++++ readline-8.0/histfile.c	2019-04-03 16:16:04.605404093 -0400
+@@ -107,6 +107,11 @@
+ #  define PATH_MAX	1024	/* default */
+ #endif
+ 
++#if defined(_WIN32)
++ #define WIN32_LEAN_AND_MEAN
++ #include <windows.h>
++#endif
++
+ extern void _hs_append_history_line PARAMS((int, const char *));
+ 
+ /* history file version; currently unused */
+@@ -139,6 +144,19 @@
+ static int histfile_backup PARAMS((const char *, const char *));
+ static int histfile_restore PARAMS((const char *, const char *));
+ 
++static int
++history_rename(const char *from, const char *to)
++{
++#if defined(_WIN32)
++  if (!MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING)) {
++    return -1;
++  }
++  return 0;
++#else
++  return rename(from, to);
++#endif
++}
++
+ /* Return the string that should be used in the place of this
+    filename.  This only matters when you don't specify the
+    filename to read_history (), or write_history (). */
+@@ -448,10 +466,10 @@
+   if ((n = readlink (filename, linkbuf, sizeof (linkbuf) - 1)) > 0)
+     {
+       linkbuf[n] = '\0';
+-      return (rename (linkbuf, back));
++      return (history_rename (linkbuf, back));
+     }
+ #endif
+-  return (rename (filename, back));
++  return (history_rename (filename, back));
+ }
+ 
+ /* Restore ORIG from BACKUP handling case where ORIG is a symlink
+@@ -467,10 +485,10 @@
+   if ((n = readlink (orig, linkbuf, sizeof (linkbuf) - 1)) > 0)
+     {
+       linkbuf[n] = '\0';
+-      return (rename (backup, linkbuf));
++      return (history_rename (backup, linkbuf));
+     }
+ #endif
+-  return (rename (backup, orig));
++  return (history_rename (backup, orig));
+ }
+ 
+ /* Truncate the history file FNAME, leaving only LINES trailing lines.