libbb: make '--help' handling more consistent
Running an applet with '--help' as its only argument is treated
as a special case.  If additional arguments follow '--help' the
behaviour is inconsistent:
- applets which call single_argv() print help and do nothing else;
- applets which call getopt() report "unrecognized option '--help'"
  and print help anyway;
- expr says "expr: syntax error" and doesn't print help;
- printenv silently ignores '--help', prints any other variables
  and doesn't print help;
- realpath says "--help: No such file or directory", prints the path
  of any other files and doesn't print help.
If the first argument is '--help' ignore any other arguments and print
help.  This is more consistent and most likely what the user wanted.
See also commit 6bdfbc4cb (libbb: fix '--help' handling in
FEATURE_SH_NOFORK=y).
function                                             old     new   delta
show_usage_if_dash_dash_help                          75      69      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-6)               Total: -6 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
			
			
This commit is contained in:
		
				
					committed by
					
						 Denys Vlasenko
						Denys Vlasenko
					
				
			
			
				
	
			
			
			
						parent
						
							41d5f800a1
						
					
				
				
					commit
					5a9d2b6e02
				
			| @@ -258,7 +258,6 @@ void lbb_prepare(const char *applet | ||||
| 	/* Redundant for busybox (run_applet_and_exit covers that case) | ||||
| 	 * but needed for "individual applet" mode */ | ||||
| 	if (argv[1] | ||||
| 	 && !argv[2] | ||||
| 	 && strcmp(argv[1], "--help") == 0 | ||||
| 	 && !is_prefixed_with(applet, "busybox") | ||||
| 	) { | ||||
| @@ -940,8 +939,8 @@ void FAST_FUNC show_usage_if_dash_dash_help(int applet_no, char **argv) | ||||
| 	 && applet_no != APPLET_NO_echo | ||||
| #  endif | ||||
| 	) { | ||||
| 		if (argv[1] && !argv[2] && strcmp(argv[1], "--help") == 0) { | ||||
| 			/* Make "foo --help" exit with 0: */ | ||||
| 		if (argv[1] && strcmp(argv[1], "--help") == 0) { | ||||
| 			/* Make "foo --help [...]" exit with 0: */ | ||||
| 			xfunc_error_retval = 0; | ||||
| 			bb_show_usage(); | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user