[3.15] gh-123018: Keep the libedit history file header when truncating (GH-157165) (#157172)
gh-123018: Keep the libedit history file header when truncating (GH-157165)
libedit's history_truncate_file() keeps the last N lines of the file,
which drops the "_HiStOrY_V2_" header line that its own write_history()
emits and that its read_history() requires. So on a libedit build,
readline.write_history_file() or readline.append_history_file() after
readline.set_history_length() produced a file that
readline.read_history_file() rejected with EINVAL.
Under the libedit emulation, truncate the file ourselves and keep the
header, resolving the default "~/.history" the same way libedit does.
Apple's libedit fork already preserves the header, so the workaround is
not compiled on macOS.
(cherry picked from commit 26387858990674f8cd20566f89c700fa1de5d829)
Co-authored-by: Gregory P. Smith <68491+gpshead@users.noreply.github.com>
3 files changed