vi: failure to open file is not an error when initialising buffer
Commit 32afd3a
introduced these regressions on the master branch:
Starting vi with no filename on the command line gives the status message
"'(null)' Bad address" instead of "- No file 1/1 100%".
Starting vi with a non-existent file on the command line gives the status
message "'new.txt' No such file or directory" instead of "- new.txt 1/1 100%"
Signed-off-by: Ron Yorston <rmy@tigress.co.uk>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
08364dab75
commit
e5213cee38
10
editors/vi.c
10
editors/vi.c
@ -542,9 +542,6 @@ static void cookmode(void); // return to "cooked" mode on tty
|
||||
static int mysleep(int);
|
||||
static int readit(void); // read (maybe cursor) key from stdin
|
||||
static int get_one_char(void); // read 1 char from stdin
|
||||
#if !ENABLE_FEATURE_VI_READONLY
|
||||
#define file_insert(fn, p, update_ro_status) file_insert(fn, p)
|
||||
#endif
|
||||
// file_insert might reallocate text[]!
|
||||
static int file_insert(const char *, char *, int);
|
||||
static int file_write(char *, char *, char *);
|
||||
@ -1325,7 +1322,7 @@ static void colon(char *buf)
|
||||
q = next_line(q);
|
||||
{ // dance around potentially-reallocated text[]
|
||||
uintptr_t ofs = q - text;
|
||||
size = file_insert(fn, q, /*update_ro:*/ 0);
|
||||
size = file_insert(fn, q, 0);
|
||||
q = text + ofs;
|
||||
}
|
||||
if (size < 0)
|
||||
@ -2905,7 +2902,7 @@ static char *get_input_line(const char *prompt)
|
||||
}
|
||||
|
||||
// might reallocate text[]!
|
||||
static int file_insert(const char *fn, char *p, int update_ro_status)
|
||||
static int file_insert(const char *fn, char *p, int initial)
|
||||
{
|
||||
int cnt = -1;
|
||||
int fd, size;
|
||||
@ -2918,6 +2915,7 @@ static int file_insert(const char *fn, char *p, int update_ro_status)
|
||||
|
||||
fd = open(fn, O_RDONLY);
|
||||
if (fd < 0) {
|
||||
if (!initial)
|
||||
status_line_bold_errno(fn);
|
||||
return cnt;
|
||||
}
|
||||
@ -2946,7 +2944,7 @@ static int file_insert(const char *fn, char *p, int update_ro_status)
|
||||
close(fd);
|
||||
|
||||
#if ENABLE_FEATURE_VI_READONLY
|
||||
if (update_ro_status
|
||||
if (initial
|
||||
&& ((access(fn, W_OK) < 0) ||
|
||||
/* root will always have access()
|
||||
* so we check fileperms too */
|
||||
|
Loading…
Reference in New Issue
Block a user