linux-user: Add proper error messages for bad options
This patch adds better support for diagnosing option parser errors. The previous implementation just printed the usage text and exited when a bad option or argument was found. This made it very difficult to determine why the usage was being displayed and it was doubly confusing for cases like '--help' (it wasn't clear that --help was actually an error). Signed-off-by: Meador Inge <meadori@codesourcery.com> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
		
							parent
							
								
									daaf8c8eb7
								
							
						
					
					
						commit
						138940bf08
					
				@ -4029,7 +4029,9 @@ static int parse_args(int argc, char **argv)
 | 
				
			|||||||
            if (!strcmp(r, arginfo->argv)) {
 | 
					            if (!strcmp(r, arginfo->argv)) {
 | 
				
			||||||
                if (arginfo->has_arg) {
 | 
					                if (arginfo->has_arg) {
 | 
				
			||||||
                    if (optind >= argc) {
 | 
					                    if (optind >= argc) {
 | 
				
			||||||
                        usage(1);
 | 
					                        (void) fprintf(stderr,
 | 
				
			||||||
 | 
					                            "qemu: missing argument for option '%s'\n", r);
 | 
				
			||||||
 | 
					                        exit(1);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    arginfo->handle_opt(argv[optind]);
 | 
					                    arginfo->handle_opt(argv[optind]);
 | 
				
			||||||
                    optind++;
 | 
					                    optind++;
 | 
				
			||||||
@ -4042,12 +4044,14 @@ static int parse_args(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* no option matched the current argv */
 | 
					        /* no option matched the current argv */
 | 
				
			||||||
        if (arginfo->handle_opt == NULL) {
 | 
					        if (arginfo->handle_opt == NULL) {
 | 
				
			||||||
            usage(1);
 | 
					            (void) fprintf(stderr, "qemu: unknown option '%s'\n", r);
 | 
				
			||||||
 | 
					            exit(1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (optind >= argc) {
 | 
					    if (optind >= argc) {
 | 
				
			||||||
        usage(1);
 | 
					        (void) fprintf(stderr, "qemu: no user program specified\n");
 | 
				
			||||||
 | 
					        exit(1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    filename = argv[optind];
 | 
					    filename = argv[optind];
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user