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-d3aeb78583b8master
parent
2bf7e975eb
commit
b24cb0cd19
|
@ -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:
|
||||
|
|
37
src/files.c
37
src/files.c
|
@ -1867,15 +1867,24 @@ int do_writeout(bool exiting)
|
|||
break;
|
||||
}
|
||||
#endif
|
||||
if (append == OVERWRITE && strcmp(answer,
|
||||
openfile->filename) != 0) {
|
||||
struct stat st;
|
||||
|
||||
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. */
|
||||
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);
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue