catch and report errors from file_write()
This commit is contained in:
parent
90372ed51a
commit
61e45dbb2f
19
editors/vi.c
19
editors/vi.c
@ -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
|
static void Indicate_Error(void); // use flash or beep to indicate error
|
||||||
#define indicate_error(c) Indicate_Error()
|
#define indicate_error(c) Indicate_Error()
|
||||||
|
|
||||||
static void Hit_Return(void);
|
static void Hit_Return(void);
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_VI_SEARCH
|
#ifdef CONFIG_FEATURE_VI_SEARCH
|
||||||
@ -1113,6 +1112,10 @@ static void colon(Byte * buf)
|
|||||||
// system(syscmd);
|
// system(syscmd);
|
||||||
forced = FALSE;
|
forced = FALSE;
|
||||||
}
|
}
|
||||||
|
if (l < 0) {
|
||||||
|
if (l == -1)
|
||||||
|
psbs("Write error: %s", strerror(errno));
|
||||||
|
} else {
|
||||||
psb("\"%s\" %dL, %dC", fn, li, l);
|
psb("\"%s\" %dL, %dC", fn, li, l);
|
||||||
if (q == text && r == end - 1 && l == ch) {
|
if (q == text && r == end - 1 && l == ch) {
|
||||||
file_modified = 0;
|
file_modified = 0;
|
||||||
@ -1121,6 +1124,7 @@ static void colon(Byte * buf)
|
|||||||
if ((cmd[0] == 'x' || cmd[1] == 'q') && l == ch) {
|
if ((cmd[0] == 'x' || cmd[1] == 'q') && l == ch) {
|
||||||
editing = 0;
|
editing = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#ifdef CONFIG_FEATURE_VI_READONLY
|
#ifdef CONFIG_FEATURE_VI_READONLY
|
||||||
vc3:;
|
vc3:;
|
||||||
#endif /* CONFIG_FEATURE_VI_READONLY */
|
#endif /* CONFIG_FEATURE_VI_READONLY */
|
||||||
@ -1147,6 +1151,7 @@ colon_s_fail:
|
|||||||
psb(":s expression missing delimiters");
|
psb(":s expression missing delimiters");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_FEATURE_VI_COLON */
|
#endif /* CONFIG_FEATURE_VI_COLON */
|
||||||
|
|
||||||
static void Hit_Return(void)
|
static void Hit_Return(void)
|
||||||
@ -2516,7 +2521,7 @@ static int file_write(Byte * fn, Byte * first, Byte * last)
|
|||||||
|
|
||||||
if (fn == 0) {
|
if (fn == 0) {
|
||||||
psbs("No current filename");
|
psbs("No current filename");
|
||||||
return (-1);
|
return (-2);
|
||||||
}
|
}
|
||||||
charcnt = 0;
|
charcnt = 0;
|
||||||
// FIXIT- use the correct umask()
|
// FIXIT- use the correct umask()
|
||||||
@ -3440,12 +3445,17 @@ key_cmd_mode:
|
|||||||
strncasecmp((char *) p, "wq", cnt) == 0 ||
|
strncasecmp((char *) p, "wq", cnt) == 0 ||
|
||||||
strncasecmp((char *) p, "x", cnt) == 0) {
|
strncasecmp((char *) p, "x", cnt) == 0) {
|
||||||
cnt = file_write(cfn, text, end - 1);
|
cnt = file_write(cfn, text, end - 1);
|
||||||
|
if (cnt < 0) {
|
||||||
|
if (cnt == -1)
|
||||||
|
psbs("Write error: %s", strerror(errno));
|
||||||
|
} else {
|
||||||
file_modified = 0;
|
file_modified = 0;
|
||||||
last_file_modified = -1;
|
last_file_modified = -1;
|
||||||
psb("\"%s\" %dL, %dC", cfn, count_lines(text, end - 1), cnt);
|
psb("\"%s\" %dL, %dC", cfn, count_lines(text, end - 1), cnt);
|
||||||
if (p[0] == 'x' || p[1] == 'q') {
|
if (p[0] == 'x' || p[1] == 'q') {
|
||||||
editing = 0;
|
editing = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if (strncasecmp((char *) p, "file", cnt) == 0 ) {
|
} else if (strncasecmp((char *) p, "file", cnt) == 0 ) {
|
||||||
last_status_cksum = 0; // force status update
|
last_status_cksum = 0; // force status update
|
||||||
} else if (sscanf((char *) p, "%d", &j) > 0) {
|
} else if (sscanf((char *) p, "%d", &j) > 0) {
|
||||||
@ -3630,7 +3640,10 @@ key_cmd_mode:
|
|||||||
#endif /* CONFIG_FEATURE_VI_READONLY */
|
#endif /* CONFIG_FEATURE_VI_READONLY */
|
||||||
) {
|
) {
|
||||||
cnt = file_write(cfn, text, end - 1);
|
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;
|
editing = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user