mirror of
https://github.com/sheumann/hush.git
synced 2024-11-19 23:31:39 +00:00
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 mysleep(int);
|
||||||
static int readit(void); // read (maybe cursor) key from stdin
|
static int readit(void); // read (maybe cursor) key from stdin
|
||||||
static int get_one_char(void); // read 1 char 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[]!
|
// file_insert might reallocate text[]!
|
||||||
static int file_insert(const char *, char *, int);
|
static int file_insert(const char *, char *, int);
|
||||||
static int file_write(char *, char *, char *);
|
static int file_write(char *, char *, char *);
|
||||||
@ -1325,7 +1322,7 @@ static void colon(char *buf)
|
|||||||
q = next_line(q);
|
q = next_line(q);
|
||||||
{ // dance around potentially-reallocated text[]
|
{ // dance around potentially-reallocated text[]
|
||||||
uintptr_t ofs = q - text;
|
uintptr_t ofs = q - text;
|
||||||
size = file_insert(fn, q, /*update_ro:*/ 0);
|
size = file_insert(fn, q, 0);
|
||||||
q = text + ofs;
|
q = text + ofs;
|
||||||
}
|
}
|
||||||
if (size < 0)
|
if (size < 0)
|
||||||
@ -2905,7 +2902,7 @@ static char *get_input_line(const char *prompt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// might reallocate text[]!
|
// 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 cnt = -1;
|
||||||
int fd, size;
|
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);
|
fd = open(fn, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
if (!initial)
|
||||||
status_line_bold_errno(fn);
|
status_line_bold_errno(fn);
|
||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
@ -2946,7 +2944,7 @@ static int file_insert(const char *fn, char *p, int update_ro_status)
|
|||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
#if ENABLE_FEATURE_VI_READONLY
|
#if ENABLE_FEATURE_VI_READONLY
|
||||||
if (update_ro_status
|
if (initial
|
||||||
&& ((access(fn, W_OK) < 0) ||
|
&& ((access(fn, W_OK) < 0) ||
|
||||||
/* root will always have access()
|
/* root will always have access()
|
||||||
* so we check fileperms too */
|
* so we check fileperms too */
|
||||||
|
Loading…
Reference in New Issue
Block a user