Commit b24cb0cd authored by David Lawrence Ramsey's avatar David Lawrence Ramsey
Browse files

in do_writeout(), fix problem where a file could sometimes be

overwritten without a warning prompt


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3942 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
No related merge requests found
Showing with 41 additions and 28 deletions
+41 -28
......@@ -8,6 +8,8 @@ CVS code -
- For consistency, when saving a file with no name, don't
allow overwriting an existing file when in restricted
mode. (DLR)
- Fix problem where a file could sometimes be overwritten
without a warning prompt. (DLR)
GNU nano 2.0.0 - 2006.11.06
- General:
......
......@@ -1867,15 +1867,24 @@ int do_writeout(bool exiting)
break;
}
#endif
if (append == OVERWRITE && strcmp(answer,
openfile->filename) != 0) {
if (append == OVERWRITE) {
char *full_answer = get_full_path(answer);
char *full_filename = get_full_path(openfile->filename);
bool different_name = (strcmp(full_answer,
full_filename) != 0);
struct stat st;
bool name_exists = (stat(full_answer, &st) != -1);
if (stat(answer, &st) != -1) {
/* If we're using restricted mode, we aren't allowed
* to save a new file under the name of an existing
* file. In this case, show a "File exists"
* error. */
free(full_filename);
free(full_answer);
if (different_name) {
if (name_exists) {
/* If we're using restricted mode, we aren't
* allowed to save a new file under the name of
* an existing file. In this case, show a "File
* exists" error. */
if (ISSET(RESTRICTED)) {
errno = EEXIST;
statusbar(_("Error writing %s: %s"), answer,
......@@ -1888,11 +1897,12 @@ int do_writeout(bool exiting)
if (i == 0 || i == -1)
continue;
}
/* If we're using restricted mode, we aren't allowed to
* change the name of a file once it has one, because
* that would allow reading from or writing to files not
* specified on the command line. In this case, don't
* bother showing the "Different Name" prompt. */
/* If we're using restricted mode, we aren't allowed
* to change the name of a file once it has one,
* because that would allow reading from or writing
* to files not specified on the command line. In
* this case, don't bother showing the "Different
* Name" prompt. */
} else if (!ISSET(RESTRICTED) &&
openfile->filename[0] != '\0'
#ifndef NANO_TINY
......@@ -1905,6 +1915,7 @@ int do_writeout(bool exiting)
continue;
}
}
}
#ifndef NANO_TINY
/* Here's where we allow the selected text to be written to
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment