vi: do not accept uppercase comments (compat). Closes bug 397.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
64
editors/vi.c
64
editors/vi.c
@ -728,6 +728,7 @@ static void setops(const char *args, const char *opname, int flg_no,
|
|||||||
const char *a = args + flg_no;
|
const char *a = args + flg_no;
|
||||||
int l = strlen(opname) - 1; /* opname have + ' ' */
|
int l = strlen(opname) - 1; /* opname have + ' ' */
|
||||||
|
|
||||||
|
// maybe strncmp? we had tons of erroneous strncasecmp's...
|
||||||
if (strncasecmp(a, opname, l) == 0
|
if (strncasecmp(a, opname, l) == 0
|
||||||
|| strncasecmp(a, short_opname, 2) == 0
|
|| strncasecmp(a, short_opname, 2) == 0
|
||||||
) {
|
) {
|
||||||
@ -823,7 +824,7 @@ static void colon(char *buf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if ENABLE_FEATURE_ALLOW_EXEC
|
#if ENABLE_FEATURE_ALLOW_EXEC
|
||||||
else if (strncmp(cmd, "!", 1) == 0) { // run a cmd
|
else if (cmd[0] == '!') { // run a cmd
|
||||||
int retcode;
|
int retcode;
|
||||||
// :!ls run the <cmd>
|
// :!ls run the <cmd>
|
||||||
go_bottom_and_clear_to_eol();
|
go_bottom_and_clear_to_eol();
|
||||||
@ -835,19 +836,19 @@ static void colon(char *buf)
|
|||||||
Hit_Return(); // let user see results
|
Hit_Return(); // let user see results
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (strncmp(cmd, "=", i) == 0) { // where is the address
|
else if (cmd[0] == '=' && !cmd[1]) { // where is the address
|
||||||
if (b < 0) { // no addr given- use defaults
|
if (b < 0) { // no addr given- use defaults
|
||||||
b = e = count_lines(text, dot);
|
b = e = count_lines(text, dot);
|
||||||
}
|
}
|
||||||
status_line("%d", b);
|
status_line("%d", b);
|
||||||
} else if (strncasecmp(cmd, "delete", i) == 0) { // delete lines
|
} else if (strncmp(cmd, "delete", i) == 0) { // delete lines
|
||||||
if (b < 0) { // no addr given- use defaults
|
if (b < 0) { // no addr given- use defaults
|
||||||
q = begin_line(dot); // assume .,. for the range
|
q = begin_line(dot); // assume .,. for the range
|
||||||
r = end_line(dot);
|
r = end_line(dot);
|
||||||
}
|
}
|
||||||
dot = yank_delete(q, r, 1, YANKDEL); // save, then delete lines
|
dot = yank_delete(q, r, 1, YANKDEL); // save, then delete lines
|
||||||
dot_skip_over_ws();
|
dot_skip_over_ws();
|
||||||
} else if (strncasecmp(cmd, "edit", i) == 0) { // Edit a file
|
} else if (strncmp(cmd, "edit", i) == 0) { // Edit a file
|
||||||
// don't edit, if the current file has been modified
|
// don't edit, if the current file has been modified
|
||||||
if (file_modified && !useforce) {
|
if (file_modified && !useforce) {
|
||||||
status_line_bold("No write since last change (:edit! overrides)");
|
status_line_bold("No write since last change (:edit! overrides)");
|
||||||
@ -888,7 +889,7 @@ static void colon(char *buf)
|
|||||||
((readonly_mode) ? " [Readonly]" : ""),
|
((readonly_mode) ? " [Readonly]" : ""),
|
||||||
)
|
)
|
||||||
li, ch);
|
li, ch);
|
||||||
} else if (strncasecmp(cmd, "file", i) == 0) { // what File is this
|
} else if (strncmp(cmd, "file", i) == 0) { // what File is this
|
||||||
if (b != -1 || e != -1) {
|
if (b != -1 || e != -1) {
|
||||||
not_implemented("No address allowed on this command");
|
not_implemented("No address allowed on this command");
|
||||||
goto vc1;
|
goto vc1;
|
||||||
@ -901,14 +902,14 @@ static void colon(char *buf)
|
|||||||
// user wants file status info
|
// user wants file status info
|
||||||
last_status_cksum = 0; // force status update
|
last_status_cksum = 0; // force status update
|
||||||
}
|
}
|
||||||
} else if (strncasecmp(cmd, "features", i) == 0) { // what features are available
|
} else if (strncmp(cmd, "features", i) == 0) { // what features are available
|
||||||
// print out values of all features
|
// print out values of all features
|
||||||
go_bottom_and_clear_to_eol();
|
go_bottom_and_clear_to_eol();
|
||||||
cookmode();
|
cookmode();
|
||||||
show_help();
|
show_help();
|
||||||
rawmode();
|
rawmode();
|
||||||
Hit_Return();
|
Hit_Return();
|
||||||
} else if (strncasecmp(cmd, "list", i) == 0) { // literal print line
|
} else if (strncmp(cmd, "list", i) == 0) { // literal print line
|
||||||
if (b < 0) { // no addr given- use defaults
|
if (b < 0) { // no addr given- use defaults
|
||||||
q = begin_line(dot); // assume .,. for the range
|
q = begin_line(dot); // assume .,. for the range
|
||||||
r = end_line(dot);
|
r = end_line(dot);
|
||||||
@ -941,8 +942,8 @@ static void colon(char *buf)
|
|||||||
vc2:
|
vc2:
|
||||||
#endif
|
#endif
|
||||||
Hit_Return();
|
Hit_Return();
|
||||||
} else if (strncasecmp(cmd, "quit", i) == 0 // Quit
|
} else if (strncmp(cmd, "quit", i) == 0 // Quit
|
||||||
|| strncasecmp(cmd, "next", i) == 0 // edit next file
|
|| strncmp(cmd, "next", i) == 0 // edit next file
|
||||||
) {
|
) {
|
||||||
if (useforce) {
|
if (useforce) {
|
||||||
// force end of argv list
|
// force end of argv list
|
||||||
@ -968,7 +969,7 @@ static void colon(char *buf)
|
|||||||
goto vc1;
|
goto vc1;
|
||||||
}
|
}
|
||||||
editing = 0;
|
editing = 0;
|
||||||
} else if (strncasecmp(cmd, "read", i) == 0) { // read file into text[]
|
} else if (strncmp(cmd, "read", i) == 0) { // read file into text[]
|
||||||
fn = args;
|
fn = args;
|
||||||
if (!fn[0]) {
|
if (!fn[0]) {
|
||||||
status_line_bold("No filename given");
|
status_line_bold("No filename given");
|
||||||
@ -1000,7 +1001,7 @@ static void colon(char *buf)
|
|||||||
dot += ch;
|
dot += ch;
|
||||||
/*file_modified++; - done by file_insert */
|
/*file_modified++; - done by file_insert */
|
||||||
}
|
}
|
||||||
} else if (strncasecmp(cmd, "rewind", i) == 0) { // rewind cmd line args
|
} else if (strncmp(cmd, "rewind", i) == 0) { // rewind cmd line args
|
||||||
if (file_modified && !useforce) {
|
if (file_modified && !useforce) {
|
||||||
status_line_bold("No write since last change (:rewind! overrides)");
|
status_line_bold("No write since last change (:rewind! overrides)");
|
||||||
} else {
|
} else {
|
||||||
@ -1009,7 +1010,7 @@ static void colon(char *buf)
|
|||||||
editing = 0;
|
editing = 0;
|
||||||
}
|
}
|
||||||
#if ENABLE_FEATURE_VI_SET
|
#if ENABLE_FEATURE_VI_SET
|
||||||
} else if (strncasecmp(cmd, "set", i) == 0) { // set or clear features
|
} else if (strncmp(cmd, "set", i) == 0) { // set or clear features
|
||||||
#if ENABLE_FEATURE_VI_SETOPTS
|
#if ENABLE_FEATURE_VI_SETOPTS
|
||||||
char *argp;
|
char *argp;
|
||||||
#endif
|
#endif
|
||||||
@ -1040,14 +1041,14 @@ static void colon(char *buf)
|
|||||||
#if ENABLE_FEATURE_VI_SETOPTS
|
#if ENABLE_FEATURE_VI_SETOPTS
|
||||||
argp = args;
|
argp = args;
|
||||||
while (*argp) {
|
while (*argp) {
|
||||||
if (strncasecmp(argp, "no", 2) == 0)
|
if (strncmp(argp, "no", 2) == 0)
|
||||||
i = 2; // ":set noautoindent"
|
i = 2; // ":set noautoindent"
|
||||||
setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT);
|
setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT);
|
||||||
setops(argp, "flash ", i, "fl", VI_ERR_METHOD);
|
setops(argp, "flash ", i, "fl", VI_ERR_METHOD);
|
||||||
setops(argp, "ignorecase ", i, "ic", VI_IGNORECASE);
|
setops(argp, "ignorecase ", i, "ic", VI_IGNORECASE);
|
||||||
setops(argp, "showmatch ", i, "ic", VI_SHOWMATCH);
|
setops(argp, "showmatch ", i, "ic", VI_SHOWMATCH);
|
||||||
/* tabstopXXXX */
|
/* tabstopXXXX */
|
||||||
if (strncasecmp(argp + i, "tabstop=%d ", 7) == 0) {
|
if (strncmp(argp + i, "tabstop=%d ", 7) == 0) {
|
||||||
sscanf(strchr(argp + i, '='), "tabstop=%d" + 7, &ch);
|
sscanf(strchr(argp + i, '='), "tabstop=%d" + 7, &ch);
|
||||||
if (ch > 0 && ch <= MAX_TABSTOP)
|
if (ch > 0 && ch <= MAX_TABSTOP)
|
||||||
tabstop = ch;
|
tabstop = ch;
|
||||||
@ -1060,7 +1061,7 @@ static void colon(char *buf)
|
|||||||
#endif /* FEATURE_VI_SETOPTS */
|
#endif /* FEATURE_VI_SETOPTS */
|
||||||
#endif /* FEATURE_VI_SET */
|
#endif /* FEATURE_VI_SET */
|
||||||
#if ENABLE_FEATURE_VI_SEARCH
|
#if ENABLE_FEATURE_VI_SEARCH
|
||||||
} else if (strncasecmp(cmd, "s", 1) == 0) { // substitute a pattern with a replacement pattern
|
} else if (cmd[0] == 's') { // substitute a pattern with a replacement pattern
|
||||||
char *ls, *F, *R;
|
char *ls, *F, *R;
|
||||||
int gflag;
|
int gflag;
|
||||||
|
|
||||||
@ -1113,12 +1114,12 @@ static void colon(char *buf)
|
|||||||
q = next_line(ls);
|
q = next_line(ls);
|
||||||
}
|
}
|
||||||
#endif /* FEATURE_VI_SEARCH */
|
#endif /* FEATURE_VI_SEARCH */
|
||||||
} else if (strncasecmp(cmd, "version", i) == 0) { // show software version
|
} else if (strncmp(cmd, "version", i) == 0) { // show software version
|
||||||
status_line(BB_VER " " BB_BT);
|
status_line(BB_VER " " BB_BT);
|
||||||
} else if (strncasecmp(cmd, "write", i) == 0 // write text to file
|
} else if (strncmp(cmd, "write", i) == 0 // write text to file
|
||||||
|| strncasecmp(cmd, "wq", i) == 0
|
|| strncmp(cmd, "wq", i) == 0
|
||||||
|| strncasecmp(cmd, "wn", i) == 0
|
|| strncmp(cmd, "wn", i) == 0
|
||||||
|| strncasecmp(cmd, "x", i) == 0
|
|| (cmd[0] == 'x' && !cmd[1])
|
||||||
) {
|
) {
|
||||||
// is there a file name to write to?
|
// is there a file name to write to?
|
||||||
if (args[0]) {
|
if (args[0]) {
|
||||||
@ -1166,7 +1167,7 @@ static void colon(char *buf)
|
|||||||
vc3:;
|
vc3:;
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_FEATURE_VI_YANKMARK
|
#if ENABLE_FEATURE_VI_YANKMARK
|
||||||
} else if (strncasecmp(cmd, "yank", i) == 0) { // yank lines
|
} else if (strncmp(cmd, "yank", i) == 0) { // yank lines
|
||||||
if (b < 0) { // no addr given- use defaults
|
if (b < 0) { // no addr given- use defaults
|
||||||
q = begin_line(dot); // assume .,. for the range
|
q = begin_line(dot); // assume .,. for the range
|
||||||
r = end_line(dot);
|
r = end_line(dot);
|
||||||
@ -1531,13 +1532,10 @@ static char *new_screen(int ro, int co)
|
|||||||
#if ENABLE_FEATURE_VI_SEARCH
|
#if ENABLE_FEATURE_VI_SEARCH
|
||||||
static int mycmp(const char *s1, const char *s2, int len)
|
static int mycmp(const char *s1, const char *s2, int len)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
i = strncmp(s1, s2, len);
|
|
||||||
if (ENABLE_FEATURE_VI_SETOPTS && ignorecase) {
|
if (ENABLE_FEATURE_VI_SETOPTS && ignorecase) {
|
||||||
i = strncasecmp(s1, s2, len);
|
return strncasecmp(s1, s2, len);
|
||||||
}
|
}
|
||||||
return i;
|
return strncmp(s1, s2, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
// search for pattern starting at p
|
// search for pattern starting at p
|
||||||
@ -3326,18 +3324,18 @@ static void do_cmd(int c)
|
|||||||
cnt = strlen(p);
|
cnt = strlen(p);
|
||||||
if (cnt <= 0)
|
if (cnt <= 0)
|
||||||
break;
|
break;
|
||||||
if (strncasecmp(p, "quit", cnt) == 0
|
if (strncmp(p, "quit", cnt) == 0
|
||||||
|| strncasecmp(p, "q!", cnt) == 0 // delete lines
|
|| strncmp(p, "q!", cnt) == 0 // delete lines
|
||||||
) {
|
) {
|
||||||
if (file_modified && p[1] != '!') {
|
if (file_modified && p[1] != '!') {
|
||||||
status_line_bold("No write since last change (:quit! overrides)");
|
status_line_bold("No write since last change (:quit! overrides)");
|
||||||
} else {
|
} else {
|
||||||
editing = 0;
|
editing = 0;
|
||||||
}
|
}
|
||||||
} else if (strncasecmp(p, "write", cnt) == 0
|
} else if (strncmp(p, "write", cnt) == 0
|
||||||
|| strncasecmp(p, "wq", cnt) == 0
|
|| strncmp(p, "wq", cnt) == 0
|
||||||
|| strncasecmp(p, "wn", cnt) == 0
|
|| strncmp(p, "wn", cnt) == 0
|
||||||
|| strncasecmp(p, "x", cnt) == 0
|
|| (p[0] == 'x' && !p[1])
|
||||||
) {
|
) {
|
||||||
cnt = file_write(current_filename, text, end - 1);
|
cnt = file_write(current_filename, text, end - 1);
|
||||||
if (cnt < 0) {
|
if (cnt < 0) {
|
||||||
@ -3353,7 +3351,7 @@ static void do_cmd(int c)
|
|||||||
editing = 0;
|
editing = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (strncasecmp(p, "file", cnt) == 0) {
|
} else if (strncmp(p, "file", cnt) == 0) {
|
||||||
last_status_cksum = 0; // force status update
|
last_status_cksum = 0; // force status update
|
||||||
} else if (sscanf(p, "%d", &j) > 0) {
|
} else if (sscanf(p, "%d", &j) > 0) {
|
||||||
dot = find_line(j); // go to line # j
|
dot = find_line(j); // go to line # j
|
||||||
|
Reference in New Issue
Block a user