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 (ISSET(RESTRICTED)) {
- errno = EEXIST;
- statusbar(_("Error writing %s: %s"), answer,
+ 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,
strerror(errno));
- retval = -1;
- break;
- } else {
- i = do_yesno_prompt(FALSE,
+ retval = -1;
+ break;
+ } else {
+ i = do_yesno_prompt(FALSE,
_("File exists, OVERWRITE ? "));
- 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. */
- } else if (!ISSET(RESTRICTED) &&
+ 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. */
+ } else if (!ISSET(RESTRICTED) &&
openfile->filename[0] != '\0'
#ifndef NANO_TINY
&& (exiting || !openfile->mark_set)
#endif
) {
- i = do_yesno_prompt(FALSE,
- _("Save file under DIFFERENT NAME ? "));
- if (i == 0 || i == -1)
- continue;
+ i = do_yesno_prompt(FALSE,
+ _("Save file under DIFFERENT NAME ? "));
+ if (i == 0 || i == -1)
+ continue;
+ }
}
}