diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-06-15 12:44:11 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-06-15 12:44:11 +0200 |
commit | 6548edd430271f6b6d2b295c77a4fdaec51a2468 (patch) | |
tree | 7053bc5c13a44057e3bacb48c4fac50652320982 /editors | |
parent | 4813a5100d70385118ee23b0171e14bc61c81f30 (diff) | |
download | busybox-6548edd430271f6b6d2b295c77a4fdaec51a2468.tar.gz |
vi: do not accept uppercase comments (compat). Closes bug 397.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors')
-rw-r--r-- | editors/vi.c | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/editors/vi.c b/editors/vi.c index ee5b5d98a..b5696fb28 100644 --- a/editors/vi.c +++ b/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; 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 |