diff options
author | Ron Yorston | 2014-11-30 20:39:25 +0000 |
---|---|---|
committer | Denys Vlasenko | 2015-01-07 17:00:48 +0100 |
commit | e5213cee3833a88397cb5e73428efb9a1b886db3 (patch) | |
tree | 4b29617fcc1024e945c6b94877184b5a4271c660 /editors/vi.c | |
parent | 08364dab752e752ba3b7da30f64d09b72d9da0ad (diff) | |
download | busybox-e5213cee3833a88397cb5e73428efb9a1b886db3.zip busybox-e5213cee3833a88397cb5e73428efb9a1b886db3.tar.gz |
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>
Diffstat (limited to 'editors/vi.c')
-rw-r--r-- | editors/vi.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/editors/vi.c b/editors/vi.c index 70bdbab..7b88e8e 100644 --- a/editors/vi.c +++ b/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,7 +2915,8 @@ static int file_insert(const char *fn, char *p, int update_ro_status) fd = open(fn, O_RDONLY); if (fd < 0) { - status_line_bold_errno(fn); + 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 */ |