ed: add support for -s command-line option as mandated by POSIX
Apart from the -p option, POSIX also mandates an -s option which suppresses the output of byte counts for the e, E, r, and w command. From these commands, Busybox ed presently only implements the r and w commands. This commit ensures that these two command do not output any bytes counts when the -s option is passed. The shell escape command, also effected by the -s option, is not implemented by Busybox at the moment. function old new delta packed_usage 34096 34115 +19 doCommands 1887 1900 +13 readLines 388 397 +9 .rodata 104196 104200 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 45/0) Total: 45 bytes Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		
				
					committed by
					
						 Denys Vlasenko
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							0e2cb6d1e2
						
					
				
				
					commit
					9173c9cce4
				
			
							
								
								
									
										15
									
								
								editors/ed.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								editors/ed.c
									
									
									
									
									
								
							| @@ -18,7 +18,7 @@ | ||||
|  | ||||
| //applet:IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP)) | ||||
|  | ||||
| //usage:#define ed_trivial_usage "[-p PROMPT] [FILE]" | ||||
| //usage:#define ed_trivial_usage "[-p PROMPT] [-s] [FILE]" | ||||
| //usage:#define ed_full_usage "" | ||||
|  | ||||
| #include "libbb.h" | ||||
| @@ -71,6 +71,11 @@ struct globals { | ||||
| 	SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ | ||||
| } while (0) | ||||
|  | ||||
| #define OPTION_STR "sp:" | ||||
| enum { | ||||
| 	OPT_s = (1 << 0), | ||||
| }; | ||||
|  | ||||
| static int bad_nums(int num1, int num2, const char *for_what) | ||||
| { | ||||
| 	if ((num1 < 1) || (num2 > lastNum) || (num1 > num2)) { | ||||
| @@ -458,7 +463,8 @@ static int readLines(const char *file, int num) | ||||
| 	 * in the following format: | ||||
| 	 * "%d\n", <number of bytes read> | ||||
| 	 */ | ||||
| 	printf("%u\n", charCount); | ||||
| 	if (!(option_mask32 & OPT_s)) | ||||
| 		printf("%u\n", charCount); | ||||
| 	return TRUE; | ||||
| } | ||||
|  | ||||
| @@ -510,7 +516,8 @@ static int writeLines(const char *file, int num1, int num2) | ||||
| 	 * unless the -s option was specified, in the following format: | ||||
| 	 * "%d\n", <number of bytes written> | ||||
| 	 */ | ||||
| 	printf("%u\n", charCount); | ||||
| 	if (!(option_mask32 & OPT_s)) | ||||
| 		printf("%u\n", charCount); | ||||
| 	return TRUE; | ||||
| } | ||||
|  | ||||
| @@ -1005,7 +1012,7 @@ int ed_main(int argc UNUSED_PARAM, char **argv) | ||||
| 	lines.prev = &lines; | ||||
|  | ||||
| 	prompt = ""; /* no prompt by default */ | ||||
| 	getopt32(argv, "p:", &prompt); | ||||
| 	getopt32(argv, OPTION_STR, &prompt); | ||||
| 	argv += optind; | ||||
|  | ||||
| 	if (argv[0]) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user