diff options
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/getopt.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/util-linux/getopt.c b/util-linux/getopt.c index 95ecba6e6..2390f3056 100644 --- a/util-linux/getopt.c +++ b/util-linux/getopt.c | |||
@@ -96,9 +96,7 @@ const char *normalize(const char *arg) | |||
96 | free(BUFFER); | 96 | free(BUFFER); |
97 | 97 | ||
98 | if (!quote) { /* Just copy arg */ | 98 | if (!quote) { /* Just copy arg */ |
99 | BUFFER=xmalloc(strlen(arg)+1); | 99 | BUFFER=xstrdup(arg); |
100 | |||
101 | strcpy(BUFFER,arg); | ||
102 | return BUFFER; | 100 | return BUFFER; |
103 | } | 101 | } |
104 | 102 | ||
@@ -204,7 +202,6 @@ static const int LONG_OPTIONS_INCR = 10; | |||
204 | /* Register a long option. The contents of name is copied. */ | 202 | /* Register a long option. The contents of name is copied. */ |
205 | void add_longopt(const char *name,int has_arg) | 203 | void add_longopt(const char *name,int has_arg) |
206 | { | 204 | { |
207 | char *tmp; | ||
208 | if (!name) { /* init */ | 205 | if (!name) { /* init */ |
209 | free(long_options); | 206 | free(long_options); |
210 | long_options=NULL; | 207 | long_options=NULL; |
@@ -228,9 +225,7 @@ void add_longopt(const char *name,int has_arg) | |||
228 | long_options[long_options_nr-1].has_arg=has_arg; | 225 | long_options[long_options_nr-1].has_arg=has_arg; |
229 | long_options[long_options_nr-1].flag=NULL; | 226 | long_options[long_options_nr-1].flag=NULL; |
230 | long_options[long_options_nr-1].val=LONG_OPT; | 227 | long_options[long_options_nr-1].val=LONG_OPT; |
231 | tmp = xmalloc(strlen(name)+1); | 228 | long_options[long_options_nr-1].name=xstrdup(name); |
232 | strcpy(tmp,name); | ||
233 | long_options[long_options_nr-1].name=tmp; | ||
234 | } | 229 | } |
235 | long_options_nr++; | 230 | long_options_nr++; |
236 | } | 231 | } |
@@ -326,7 +321,7 @@ int getopt_main(int argc, char *argv[]) | |||
326 | /* For some reason, the original getopt gave no error | 321 | /* For some reason, the original getopt gave no error |
327 | when there were no arguments. */ | 322 | when there were no arguments. */ |
328 | printf(" --\n"); | 323 | printf(" --\n"); |
329 | exit(0); | 324 | return 0; |
330 | } else | 325 | } else |
331 | error_msg_and_die("missing optstring argument"); | 326 | error_msg_and_die("missing optstring argument"); |
332 | } | 327 | } |
@@ -336,7 +331,7 @@ int getopt_main(int argc, char *argv[]) | |||
336 | optstr=xmalloc(strlen(argv[1])+1); | 331 | optstr=xmalloc(strlen(argv[1])+1); |
337 | strcpy(optstr,argv[1]+strspn(argv[1],"-+")); | 332 | strcpy(optstr,argv[1]+strspn(argv[1],"-+")); |
338 | argv[1]=argv[0]; | 333 | argv[1]=argv[0]; |
339 | exit(generate_output(argv+1,argc-1,optstr,long_options)); | 334 | return (generate_output(argv+1,argc-1,optstr,long_options)); |
340 | } | 335 | } |
341 | 336 | ||
342 | while ((opt=getopt_long(argc,argv,shortopts,longopts,NULL)) != EOF) | 337 | while ((opt=getopt_long(argc,argv,shortopts,longopts,NULL)) != EOF) |
@@ -347,8 +342,7 @@ int getopt_main(int argc, char *argv[]) | |||
347 | case 'o': | 342 | case 'o': |
348 | if (optstr) | 343 | if (optstr) |
349 | free(optstr); | 344 | free(optstr); |
350 | optstr=xmalloc(strlen(optarg)+1); | 345 | optstr=xstrdup(optarg); |
351 | strcpy(optstr,optarg); | ||
352 | break; | 346 | break; |
353 | case 'l': | 347 | case 'l': |
354 | add_long_options(optarg); | 348 | add_long_options(optarg); |
@@ -356,8 +350,7 @@ int getopt_main(int argc, char *argv[]) | |||
356 | case 'n': | 350 | case 'n': |
357 | if (name) | 351 | if (name) |
358 | free(name); | 352 | free(name); |
359 | name=xmalloc(strlen(optarg)+1); | 353 | name=xstrdup(optarg); |
360 | strcpy(name,optarg); | ||
361 | break; | 354 | break; |
362 | case 'q': | 355 | case 'q': |
363 | quiet_errors=1; | 356 | quiet_errors=1; |
@@ -369,7 +362,7 @@ int getopt_main(int argc, char *argv[]) | |||
369 | set_shell(optarg); | 362 | set_shell(optarg); |
370 | break; | 363 | break; |
371 | case 'T': | 364 | case 'T': |
372 | exit(4); | 365 | return 4; |
373 | case 'u': | 366 | case 'u': |
374 | quote=0; | 367 | quote=0; |
375 | break; | 368 | break; |
@@ -381,8 +374,7 @@ int getopt_main(int argc, char *argv[]) | |||
381 | if (optind >= argc) | 374 | if (optind >= argc) |
382 | error_msg_and_die("missing optstring argument"); | 375 | error_msg_and_die("missing optstring argument"); |
383 | else { | 376 | else { |
384 | optstr=xmalloc(strlen(argv[optind])+1); | 377 | optstr=xstrdup(argv[optind]); |
385 | strcpy(optstr,argv[optind]); | ||
386 | optind++; | 378 | optind++; |
387 | } | 379 | } |
388 | } | 380 | } |
@@ -390,7 +382,7 @@ int getopt_main(int argc, char *argv[]) | |||
390 | argv[optind-1]=name; | 382 | argv[optind-1]=name; |
391 | else | 383 | else |
392 | argv[optind-1]=argv[0]; | 384 | argv[optind-1]=argv[0]; |
393 | exit(generate_output(argv+optind-1,argc-optind+1,optstr,long_options)); | 385 | return (generate_output(argv+optind-1,argc-optind+1,optstr,long_options)); |
394 | } | 386 | } |
395 | 387 | ||
396 | /* | 388 | /* |