diff options
-rw-r--r-- | editors/sed.c | 56 |
1 files changed, 22 insertions, 34 deletions
diff --git a/editors/sed.c b/editors/sed.c index 98437585c..ee910d7ab 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -1086,7 +1086,9 @@ static void add_cmd_block(char *cmdstr) int sed_main(int argc, char **argv) { - int status = EXIT_SUCCESS, opt, getpat = 1; + unsigned long opt; + char *opt_e, *opt_f; + int status = EXIT_SUCCESS, getpat = 1; bbg.sed_cmd_tail=&bbg.sed_cmd_head; @@ -1100,41 +1102,27 @@ int sed_main(int argc, char **argv) } /* do normal option parsing */ - while ((opt = getopt(argc, argv, "irne:f:")) > 0) { - switch (opt) { - case 'i': - bbg.in_place++; - atexit(cleanup_outname); - break; - case 'r': - bbg.regex_type|=REG_EXTENDED; - break; - case 'n': - bbg.be_quiet++; - break; - case 'e': - add_cmd_block(optarg); + opt = bb_getopt_ulflags(argc, argv, "irne:f:", &opt_e, &opt_f); + if (opt & 0x1) { // -i + bbg.in_place++; + atexit(cleanup_outname); + } + if (opt & 0x2) bbg.regex_type|=REG_EXTENDED; // -r + if (opt & 0x4) bbg.be_quiet++; // -n + if (opt & 0x8) { // -e + add_cmd_block(opt_e); + getpat=0; + } + if (opt & 0x10) { // -f + FILE *cmdfile; + char *line; + cmdfile = xfopen(opt_f, "r"); + while ((line = bb_get_chomped_line_from_file(cmdfile)) != NULL) { + add_cmd(line); getpat=0; - break; - case 'f': - { - FILE *cmdfile; - char *line; - - cmdfile = xfopen(optarg, "r"); - - while ((line = bb_get_chomped_line_from_file(cmdfile)) != NULL) { - add_cmd(line); - getpat=0; - free(line); - } - xprint_and_close_file(cmdfile); - - break; - } - default: - bb_show_usage(); + free(line); } + xprint_and_close_file(cmdfile); } /* if we didn't get a pattern from -e or -f, use argv[optind] */ |