catch and report errors from file_write()

This commit is contained in:
Paul Fox 2005-10-09 14:43:22 +00:00
parent 90372ed51a
commit 61e45dbb2f

View File

@ -283,7 +283,6 @@ static void refresh(int); // update the terminal from screen[]
static void Indicate_Error(void); // use flash or beep to indicate error
#define indicate_error(c) Indicate_Error()
static void Hit_Return(void);
#ifdef CONFIG_FEATURE_VI_SEARCH
@ -1113,13 +1112,18 @@ static void colon(Byte * buf)
// system(syscmd);
forced = FALSE;
}
psb("\"%s\" %dL, %dC", fn, li, l);
if (q == text && r == end - 1 && l == ch) {
file_modified = 0;
last_file_modified = -1;
}
if ((cmd[0] == 'x' || cmd[1] == 'q') && l == ch) {
editing = 0;
if (l < 0) {
if (l == -1)
psbs("Write error: %s", strerror(errno));
} else {
psb("\"%s\" %dL, %dC", fn, li, l);
if (q == text && r == end - 1 && l == ch) {
file_modified = 0;
last_file_modified = -1;
}
if ((cmd[0] == 'x' || cmd[1] == 'q') && l == ch) {
editing = 0;
}
}
#ifdef CONFIG_FEATURE_VI_READONLY
vc3:;
@ -1147,6 +1151,7 @@ colon_s_fail:
psb(":s expression missing delimiters");
#endif
}
#endif /* CONFIG_FEATURE_VI_COLON */
static void Hit_Return(void)
@ -2516,7 +2521,7 @@ static int file_write(Byte * fn, Byte * first, Byte * last)
if (fn == 0) {
psbs("No current filename");
return (-1);
return (-2);
}
charcnt = 0;
// FIXIT- use the correct umask()
@ -3440,11 +3445,16 @@ key_cmd_mode:
strncasecmp((char *) p, "wq", cnt) == 0 ||
strncasecmp((char *) p, "x", cnt) == 0) {
cnt = file_write(cfn, text, end - 1);
file_modified = 0;
last_file_modified = -1;
psb("\"%s\" %dL, %dC", cfn, count_lines(text, end - 1), cnt);
if (p[0] == 'x' || p[1] == 'q') {
editing = 0;
if (cnt < 0) {
if (cnt == -1)
psbs("Write error: %s", strerror(errno));
} else {
file_modified = 0;
last_file_modified = -1;
psb("\"%s\" %dL, %dC", cfn, count_lines(text, end - 1), cnt);
if (p[0] == 'x' || p[1] == 'q') {
editing = 0;
}
}
} else if (strncasecmp((char *) p, "file", cnt) == 0 ) {
last_status_cksum = 0; // force status update
@ -3630,7 +3640,10 @@ key_cmd_mode:
#endif /* CONFIG_FEATURE_VI_READONLY */
) {
cnt = file_write(cfn, text, end - 1);
if (cnt == (end - 1 - text + 1)) {
if (cnt < 0) {
if (cnt == -1)
psbs("Write error: %s", strerror(errno));
} else if (cnt == (end - 1 - text + 1)) {
editing = 0;
}
} else {