vi: do not accept uppercase comments (compat). Closes bug 397.
No binary (build failed)
—
(log yok)
| @@ -728,6 +728,7 @@ static void setops(const char *args, const char *opname, int flg_no, | |
| const char *a = args + flg_no; | |
| int l = strlen(opname) - 1; /* opname have + ' ' */ | |
| + | // maybe strncmp? we had tons of erroneous strncasecmp's... |
| if (strncasecmp(a, opname, l) == 0 | |
| || strncasecmp(a, short_opname, 2) == 0 | |
| ) { | |
| @@ -823,7 +824,7 @@ static void colon(char *buf) | |
| } | |
| } | |
| #if ENABLE_FEATURE_ALLOW_EXEC | |
| - | else if (strncmp(cmd, "!", 1) == 0) { // run a cmd |
| + | else if (cmd[0] == '!') { // run a cmd |
| int retcode; | |
| // :!ls run the <cmd> | |
| go_bottom_and_clear_to_eol(); | |
| @@ -835,19 +836,19 @@ static void colon(char *buf) | |
| Hit_Return(); // let user see results | |
| } | |
| #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 | |
| b = e = count_lines(text, dot); | |
| } | |
| 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 | |
| q = begin_line(dot); // assume .,. for the range | |
| r = end_line(dot); | |
| } | |
| dot = yank_delete(q, r, 1, YANKDEL); // save, then delete lines | |
| 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 | |
| if (file_modified && !useforce) { | |
| status_line_bold("No write since last change (:edit! overrides)"); | |
| @@ -888,7 +889,7 @@ static void colon(char *buf) | |
| ((readonly_mode) ? " [Readonly]" : ""), | |
| ) | |
| 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) { | |
| not_implemented("No address allowed on this command"); | |
| goto vc1; | |
| @@ -901,14 +902,14 @@ static void colon(char *buf) | |
| // user wants file status info | |
| 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 | |
| go_bottom_and_clear_to_eol(); | |
| cookmode(); | |
| show_help(); | |
| rawmode(); | |
| 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 | |
| q = begin_line(dot); // assume .,. for the range | |
| r = end_line(dot); | |
| @@ -941,8 +942,8 @@ static void colon(char *buf) | |
| vc2: | |
| #endif | |
| Hit_Return(); | |
| - | } else if (strncasecmp(cmd, "quit", i) == 0 // Quit |
| - | || strncasecmp(cmd, "next", i) == 0 // edit next file |
| + | } else if (strncmp(cmd, "quit", i) == 0 // Quit |
| + | || strncmp(cmd, "next", i) == 0 // edit next file |
| ) { | |
| if (useforce) { | |
| // force end of argv list | |
| @@ -968,7 +969,7 @@ static void colon(char *buf) | |
| goto vc1; | |
| } | |
| 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; | |
| if (!fn[0]) { | |
| status_line_bold("No filename given"); | |
| @@ -1000,7 +1001,7 @@ static void colon(char *buf) | |
| dot += ch; | |
| /*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) { | |
| status_line_bold("No write since last change (:rewind! overrides)"); | |
| } else { | |
| @@ -1009,7 +1010,7 @@ static void colon(char *buf) | |
| editing = 0; | |
| } | |
| #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 | |
| char *argp; | |
| #endif | |
| @@ -1040,14 +1041,14 @@ static void colon(char *buf) | |
| #if ENABLE_FEATURE_VI_SETOPTS | |
| argp = args; | |
| while (*argp) { | |
| - | if (strncasecmp(argp, "no", 2) == 0) |
| + | if (strncmp(argp, "no", 2) == 0) |
| i = 2; // ":set noautoindent" | |
| setops(argp, "autoindent ", i, "ai", VI_AUTOINDENT); | |
| setops(argp, "flash ", i, "fl", VI_ERR_METHOD); | |
| setops(argp, "ignorecase ", i, "ic", VI_IGNORECASE); | |
| setops(argp, "showmatch ", i, "ic", VI_SHOWMATCH); | |
| /* 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); | |
| if (ch > 0 && ch <= MAX_TABSTOP) | |
| tabstop = ch; | |
| @@ -1060,7 +1061,7 @@ static void colon(char *buf) | |
| #endif /* FEATURE_VI_SETOPTS */ | |
| #endif /* FEATURE_VI_SET */ | |
| #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; | |
| int gflag; | |
| @@ -1113,12 +1114,12 @@ static void colon(char *buf) | |
| q = next_line(ls); | |
| } | |
| #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); | |
| - | } else if (strncasecmp(cmd, "write", i) == 0 // write text to file |
| - | || strncasecmp(cmd, "wq", i) == 0 |
| - | || strncasecmp(cmd, "wn", i) == 0 |
| - | || strncasecmp(cmd, "x", i) == 0 |
| + | } else if (strncmp(cmd, "write", i) == 0 // write text to file |
| + | || strncmp(cmd, "wq", i) == 0 |
| + | || strncmp(cmd, "wn", i) == 0 |
| + | || (cmd[0] == 'x' && !cmd[1]) |
| ) { | |
| // is there a file name to write to? | |
| if (args[0]) { | |
| @@ -1166,7 +1167,7 @@ static void colon(char *buf) | |
| vc3:; | |
| #endif | |
| #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 | |
| q = begin_line(dot); // assume .,. for the range | |
| r = end_line(dot); | |
| @@ -1531,13 +1532,10 @@ static char *new_screen(int ro, int co) | |
| #if ENABLE_FEATURE_VI_SEARCH | |
| static int mycmp(const char *s1, const char *s2, int len) | |
| { | |
| - | int i; |
| - | |
| - | i = strncmp(s1, s2, len); |
| 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 | |
| @@ -3326,18 +3324,18 @@ static void do_cmd(int c) | |
| cnt = strlen(p); | |
| if (cnt <= 0) | |
| break; | |
| - | if (strncasecmp(p, "quit", cnt) == 0 |
| - | || strncasecmp(p, "q!", cnt) == 0 // delete lines |
| + | if (strncmp(p, "quit", cnt) == 0 |
| + | || strncmp(p, "q!", cnt) == 0 // delete lines |
| ) { | |
| if (file_modified && p[1] != '!') { | |
| status_line_bold("No write since last change (:quit! overrides)"); | |
| } else { | |
| editing = 0; | |
| } | |
| - | } else if (strncasecmp(p, "write", cnt) == 0 |
| - | || strncasecmp(p, "wq", cnt) == 0 |
| - | || strncasecmp(p, "wn", cnt) == 0 |
| - | || strncasecmp(p, "x", cnt) == 0 |
| + | } else if (strncmp(p, "write", cnt) == 0 |
| + | || strncmp(p, "wq", cnt) == 0 |
| + | || strncmp(p, "wn", cnt) == 0 |
| + | || (p[0] == 'x' && !p[1]) |
| ) { | |
| cnt = file_write(current_filename, text, end - 1); | |
| if (cnt < 0) { | |
| @@ -3353,7 +3351,7 @@ static void do_cmd(int c) | |
| editing = 0; | |
| } | |
| } | |
| - | } else if (strncasecmp(p, "file", cnt) == 0) { |
| + | } else if (strncmp(p, "file", cnt) == 0) { |
| last_status_cksum = 0; // force status update | |
| } else if (sscanf(p, "%d", &j) > 0) { | |
| dot = find_line(j); // go to line # j | |