summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2025-04-15 10:03:23 -0700
committerBart Schaefer <schaefer@zsh.org>2025-04-15 10:03:23 -0700
commitbacc78ec3f9d75ff242d0592b2f44484e1198801 (patch)
treef3fe9666d13e4eecde659ffb02bb664697bd4968
parentba1473181fc13e032205a8c81a59b56b8e33df4d (diff)
downloadzsh-bacc78ec3f9d75ff242d0592b2f44484e1198801.tar.gz
zsh-bacc78ec3f9d75ff242d0592b2f44484e1198801.zip
53454: fix interrupt handling in savehistfile()
-rw-r--r--ChangeLog4
-rw-r--r--Src/hist.c13
2 files changed, 12 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index eb2924d45..4b4913252 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2025-04-15 Bart Schaefer <schaefer@zsh.org>
+
+ * 53454: Src/hist.c: fix interrupt handling in savehistfile()
+
2025-04-15 Eric Cook <illua@users.sourceforge.net>
* 53485: NEWS: update for version 5.10
diff --git a/Src/hist.c b/Src/hist.c
index fa1ede3f0..00bdbb2b8 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -2838,11 +2838,12 @@ readhistfile(char *fn, int err, int readflags)
*/
if (uselex || remeta)
freeheap();
- if (errflag & ERRFLAG_INT) {
- /* Can't assume fast read next time if interrupted. */
- lasthist.interrupted = 1;
+ if (errflag & ERRFLAG_INT)
break;
- }
+ }
+ if (errflag & ERRFLAG_INT) {
+ /* Can't assume fast read next time if interrupted. */
+ lasthist.interrupted = 1;
}
if (start && readflags & HFILE_USE_OPTIONS) {
zsfree(lasthist.text);
@@ -3108,7 +3109,9 @@ savehistfile(char *fn, int err, int writeflags)
hist_ignore_all_dups |= isset(HISTSAVENODUPS);
readhistfile(fn, err, 0);
hist_ignore_all_dups = isset(HISTIGNOREALLDUPS);
- if (histlinect)
+ if (errflag & ERRFLAG_INT)
+ ret = -1;
+ else if (histlinect)
savehistfile(fn, err, 0);
pophiststack();