fix(shada): ":wshada/:rshada [filename]" with shadafile=NONE #32538

Problem: read/write shada function logic was skipped entirely if it was
detected the shadafile option was set to 'NONE'.

Solution: The filename is now always resolved. When the shadafile option
is set to 'NONE' AND no filename was passed, the filename resolves to an
empty string, which causes the read/write functions to return.
Regardless of whether the option is set to 'NONE', when a filename is
explicitly passed, it gets resolved and the read/write logic is
accessed.
This commit is contained in:
IpsumCapra
2025-02-26 20:03:50 +01:00
committed by GitHub
parent 0f24b0826a
commit f4921e2b7d
3 changed files with 25 additions and 15 deletions

View File

@@ -579,15 +579,6 @@ static void close_file(FileDescriptor *cookie)
}
}
/// Check whether writing to shada file was disabled ("-i NONE" or "--clean").
///
/// @return true if it was disabled, false otherwise.
static bool shada_disabled(void)
FUNC_ATTR_PURE
{
return strequal(p_shadafile, "NONE");
}
/// Read ShaDa file
///
/// @param[in] file File to read or NULL to use default name.
@@ -597,12 +588,12 @@ static bool shada_disabled(void)
static int shada_read_file(const char *const file, const int flags)
FUNC_ATTR_WARN_UNUSED_RESULT
{
if (shada_disabled()) {
char *const fname = shada_filename(file);
if (strequal(fname, "")) {
return FAIL;
}
char *const fname = shada_filename(file);
FileDescriptor sd_reader;
int of_ret = file_open(&sd_reader, fname, kFileReadOnly, 0);
@@ -1298,7 +1289,12 @@ static char *shada_filename(const char *file)
{
if (file == NULL || *file == NUL) {
if (p_shadafile != NULL && *p_shadafile != NUL) {
file = p_shadafile;
// Check if writing to ShaDa file was disabled ("-i NONE" or "--clean").
if (!strequal(p_shadafile, "NONE")) {
file = p_shadafile;
} else {
return "";
}
} else {
if ((file = find_shada_parameter('n')) == NULL || *file == NUL) {
file = shada_get_default_file();
@@ -2699,11 +2695,12 @@ shada_write_exit:
/// @return OK if writing was successful, FAIL otherwise.
int shada_write_file(const char *const file, bool nomerge)
{
if (shada_disabled()) {
char *const fname = shada_filename(file);
if (strequal(fname, "")) {
return FAIL;
}
char *const fname = shada_filename(file);
char *tempname = NULL;
FileDescriptor sd_writer;
FileDescriptor sd_reader;