diff options
| -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 | 
