mkimage: Convert to use getopt()
The current way of parsing arguments is a bit clumsy. It seems better to use getopt() which is commonly used for this purpose. Convert the code to use getopt() and make a few minor adjustments as needed. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									0b443dee6b
								
							
						
					
					
						commit
						a02221f29d
					
				
							
								
								
									
										231
									
								
								tools/mkimage.c
								
								
								
								
							
							
						
						
									
										231
									
								
								tools/mkimage.c
								
								
								
								
							|  | @ -70,144 +70,113 @@ static void show_image_types(void) | ||||||
| static void process_args(int argc, char **argv) | static void process_args(int argc, char **argv) | ||||||
| { | { | ||||||
| 	char *ptr; | 	char *ptr; | ||||||
|  | 	int opt; | ||||||
| 
 | 
 | ||||||
| 	while (--argc > 0 && **++argv == '-') { | 	while ((opt = getopt(argc, argv, | ||||||
| 		while (*++*argv) { | 			     "a:A:cC:d:D:e:f:Fk:K:ln:O:rR:sT:vVx")) != -1) { | ||||||
| 			switch (**argv) { | 		switch (opt) { | ||||||
| 			case 'l': | 		case 'l': | ||||||
| 				params.lflag = 1; | 			params.lflag = 1; | ||||||
| 				break; | 			break; | ||||||
| 			case 'A': | 		case 'A': | ||||||
| 				if ((--argc <= 0) || | 			params.arch = genimg_get_arch_id(optarg); | ||||||
| 					(params.arch = | 			if (params.arch < 0) | ||||||
| 					genimg_get_arch_id (*++argv)) < 0) | 				usage(); | ||||||
| 					usage(); | 			break; | ||||||
| 				goto NXTARG; | 		case 'c': | ||||||
| 			case 'c': | 			params.comment = optarg; | ||||||
| 				if (--argc <= 0) | 			break; | ||||||
| 					usage(); | 		case 'C': | ||||||
| 				params.comment = *++argv; | 			params.comp = genimg_get_comp_id(optarg); | ||||||
| 				goto NXTARG; | 			if (params.comp < 0) | ||||||
| 			case 'C': | 				usage(); | ||||||
| 				if ((--argc <= 0) || | 			break; | ||||||
| 					(params.comp = | 		case 'D': | ||||||
| 					genimg_get_comp_id (*++argv)) < 0) | 			params.dtc = optarg; | ||||||
| 					usage(); | 			break; | ||||||
| 				goto NXTARG; | 		case 'O': | ||||||
| 			case 'D': | 			params.os = genimg_get_os_id(optarg); | ||||||
| 				if (--argc <= 0) | 			if (params.os < 0) | ||||||
| 					usage(); | 				usage(); | ||||||
| 				params.dtc = *++argv; | 			break; | ||||||
| 				goto NXTARG; | 		case 'T': | ||||||
| 
 | 			params.type = genimg_get_type_id(optarg); | ||||||
| 			case 'O': | 			if (params.type < 0) { | ||||||
| 				if ((--argc <= 0) || | 				show_image_types(); | ||||||
| 					(params.os = |  | ||||||
| 					genimg_get_os_id (*++argv)) < 0) |  | ||||||
| 					usage(); |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'T': |  | ||||||
| 				params.type = -1; |  | ||||||
| 				if (--argc >= 0 && argv[1]) { |  | ||||||
| 					params.type = |  | ||||||
| 						genimg_get_type_id(*++argv); |  | ||||||
| 				} |  | ||||||
| 				if (params.type < 0) { |  | ||||||
| 					show_image_types(); |  | ||||||
| 					usage(); |  | ||||||
| 				} |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'a': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.addr = strtoull(*++argv, &ptr, 16); |  | ||||||
| 				if (*ptr) { |  | ||||||
| 					fprintf (stderr, |  | ||||||
| 						"%s: invalid load address %s\n", |  | ||||||
| 						params.cmdname, *argv); |  | ||||||
| 					exit (EXIT_FAILURE); |  | ||||||
| 				} |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'd': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.datafile = *++argv; |  | ||||||
| 				params.dflag = 1; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'e': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.ep = strtoull(*++argv, &ptr, 16); |  | ||||||
| 				if (*ptr) { |  | ||||||
| 					fprintf (stderr, |  | ||||||
| 						"%s: invalid entry point %s\n", |  | ||||||
| 						params.cmdname, *argv); |  | ||||||
| 					exit (EXIT_FAILURE); |  | ||||||
| 				} |  | ||||||
| 				params.eflag = 1; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'f': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.datafile = *++argv; |  | ||||||
| 				/* no break */ |  | ||||||
| 			case 'F': |  | ||||||
| 				/*
 |  | ||||||
| 				 * The flattened image tree (FIT) format |  | ||||||
| 				 * requires a flattened device tree image type |  | ||||||
| 				 */ |  | ||||||
| 				params.type = IH_TYPE_FLATDT; |  | ||||||
| 				params.fflag = 1; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'k': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.keydir = *++argv; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'K': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.keydest = *++argv; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'n': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				params.imagename = *++argv; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 'r': |  | ||||||
| 				params.require_keys = 1; |  | ||||||
| 				break; |  | ||||||
| 			case 'R': |  | ||||||
| 				if (--argc <= 0) |  | ||||||
| 					usage(); |  | ||||||
| 				/*
 |  | ||||||
| 				 * This entry is for the second configuration |  | ||||||
| 				 * file, if only one is not enough. |  | ||||||
| 				 */ |  | ||||||
| 				params.imagename2 = *++argv; |  | ||||||
| 				goto NXTARG; |  | ||||||
| 			case 's': |  | ||||||
| 				params.skipcpy = 1; |  | ||||||
| 				break; |  | ||||||
| 			case 'v': |  | ||||||
| 				params.vflag++; |  | ||||||
| 				break; |  | ||||||
| 			case 'V': |  | ||||||
| 				printf("mkimage version %s\n", PLAIN_VERSION); |  | ||||||
| 				exit(EXIT_SUCCESS); |  | ||||||
| 			case 'x': |  | ||||||
| 				params.xflag++; |  | ||||||
| 				break; |  | ||||||
| 			default: |  | ||||||
| 				usage(); | 				usage(); | ||||||
| 			} | 			} | ||||||
|  | 			break; | ||||||
|  | 		case 'a': | ||||||
|  | 			params.addr = strtoull(optarg, &ptr, 16); | ||||||
|  | 			if (*ptr) { | ||||||
|  | 				fprintf(stderr, "%s: invalid load address %s\n", | ||||||
|  | 					params.cmdname, optarg); | ||||||
|  | 				exit(EXIT_FAILURE); | ||||||
|  | 			} | ||||||
|  | 			break; | ||||||
|  | 		case 'd': | ||||||
|  | 			params.datafile = optarg; | ||||||
|  | 			params.dflag = 1; | ||||||
|  | 			break; | ||||||
|  | 		case 'e': | ||||||
|  | 			params.ep = strtoull(optarg, &ptr, 16); | ||||||
|  | 			if (*ptr) { | ||||||
|  | 				fprintf(stderr, "%s: invalid entry point %s\n", | ||||||
|  | 					params.cmdname, optarg); | ||||||
|  | 				exit(EXIT_FAILURE); | ||||||
|  | 			} | ||||||
|  | 			params.eflag = 1; | ||||||
|  | 			break; | ||||||
|  | 		case 'f': | ||||||
|  | 			params.datafile = optarg; | ||||||
|  | 			/* no break */ | ||||||
|  | 		case 'F': | ||||||
|  | 			/*
 | ||||||
|  | 			 * The flattened image tree (FIT) format | ||||||
|  | 			 * requires a flattened device tree image type | ||||||
|  | 			 */ | ||||||
|  | 			params.type = IH_TYPE_FLATDT; | ||||||
|  | 			params.fflag = 1; | ||||||
|  | 			break; | ||||||
|  | 		case 'k': | ||||||
|  | 			params.keydir = optarg; | ||||||
|  | 			break; | ||||||
|  | 		case 'K': | ||||||
|  | 			params.keydest = optarg; | ||||||
|  | 			break; | ||||||
|  | 		case 'n': | ||||||
|  | 			params.imagename = optarg; | ||||||
|  | 			break; | ||||||
|  | 		case 'r': | ||||||
|  | 			params.require_keys = 1; | ||||||
|  | 			break; | ||||||
|  | 		case 'R': | ||||||
|  | 			/*
 | ||||||
|  | 			 * This entry is for the second configuration | ||||||
|  | 			 * file, if only one is not enough. | ||||||
|  | 			 */ | ||||||
|  | 			params.imagename2 = optarg; | ||||||
|  | 			break; | ||||||
|  | 		case 's': | ||||||
|  | 			params.skipcpy = 1; | ||||||
|  | 			break; | ||||||
|  | 		case 'v': | ||||||
|  | 			params.vflag++; | ||||||
|  | 			break; | ||||||
|  | 		case 'V': | ||||||
|  | 			printf("mkimage version %s\n", PLAIN_VERSION); | ||||||
|  | 			exit(EXIT_SUCCESS); | ||||||
|  | 		case 'x': | ||||||
|  | 			params.xflag++; | ||||||
|  | 			break; | ||||||
|  | 		default: | ||||||
|  | 			usage(); | ||||||
| 		} | 		} | ||||||
| NXTARG:		; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (argc != 1) | 	if (optind >= argc) | ||||||
| 		usage(); | 		usage(); | ||||||
| 	params.imagefile = *argv; | 	params.imagefile = argv[optind]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue