losetup: getopt_ulflags'ification + small fix for perror_nomsg
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -27,7 +27,9 @@ void bb_verror_msg(const char *s, va_list p, const char* strerr) | |
| if (!strerr) | |
| fputs(msg_eol, stderr); | |
| else | |
| - | fprintf(stderr, ": %s%s", strerr, msg_eol); |
| + | fprintf(stderr, "%s%s%s", |
| + | s ? ": " : "", |
| + | strerr, msg_eol); |
| } | |
| if (ENABLE_FEATURE_SYSLOG && (logmode & LOGMODE_SYSLOG)) { | |
| if (!strerr) | |
| @@ -12,39 +12,41 @@ | |
| #include "busybox.h" | |
| - | int losetup_main (int argc, char **argv) |
| + | int losetup_main(int argc, char **argv) |
| { | |
| - | int offset = 0; |
| - | |
| - | /* This will need a "while(getopt()!=-1)" loop when we can have more than |
| - | one option, but for now we can't. */ |
| - | switch(getopt(argc,argv, "do:")) { |
| - | case 'd': |
| - | /* detach takes exactly one argument */ |
| - | if(optind+1!=argc) bb_show_usage(); |
| - | if(!del_loop(argv[optind])) return EXIT_SUCCESS; |
| - | die_failed: |
| - | bb_perror_msg_and_die("%s",argv[optind]); |
| - | |
| - | case 'o': |
| - | offset = bb_xparse_number (optarg, NULL); |
| - | /* Fall through to do the losetup */ |
| - | case -1: |
| - | /* losetup takes two argument:, loop_device and file */ |
| - | if(optind+2==argc) { |
| - | if(set_loop(&argv[optind], argv[optind + 1], offset)>=0) |
| - | return EXIT_SUCCESS; |
| - | else goto die_failed; |
| - | } |
| - | if(optind+1==argc) { |
| - | char *s=query_loop(argv[optind]); |
| - | if (!s) goto die_failed; |
| - | printf("%s: %s\n",argv[optind],s); |
| - | if(ENABLE_FEATURE_CLEAN_UP) free(s); |
| + | unsigned long opt; |
| + | char *opt_o; |
| + | int offset = 0; |
| + | |
| + | opt = bb_getopt_ulflags(argc, argv, "do:", &opt_o); |
| + | argc -= optind; |
| + | argv += optind; |
| + | |
| + | if (opt == 0x3) bb_show_usage(); // -d and -o (illegal) |
| + | |
| + | if (opt == 0x1) { // -d |
| + | /* detach takes exactly one argument */ |
| + | if (argc != 1) |
| + | bb_show_usage(); |
| + | if (!del_loop(argv[0])) |
| + | return EXIT_SUCCESS; |
| + | bb_perror_nomsg_and_die(); |
| + | } |
| + | |
| + | if (opt == 0x2) // -o |
| + | offset = bb_xparse_number(opt_o, NULL); |
| + | |
| + | /* -o or no option */ |
| + | |
| + | if (argc == 2) { |
| + | if (set_loop(&argv[0], argv[1], offset) < 0) |
| + | bb_perror_nomsg_and_die(); |
| + | } else if (argc == 1) { |
| + | char *s = query_loop(argv[0]); |
| + | if (!s) bb_perror_nomsg_and_die(); |
| + | printf("%s: %s\n", argv[0], s); |
| + | if (ENABLE_FEATURE_CLEAN_UP) free(s); |
| + | } else |
| + | bb_show_usage(); |
| return EXIT_SUCCESS; | |
| - | } |
| - | break; |
| - | } |
| - | bb_show_usage(); |
| - | return EXIT_FAILURE; |
| } | |