summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-09-22 08:56:03 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-09-22 08:56:03 +0000
commit750fc6d7bb6dc4c57399696e5e05c75c6cdd4aa5 (patch)
tree52e9ba9d455376a16a3086986e5ea60e6142f623
parent8514fc5681a640b305a79bb9d42fcec4d3b113d5 (diff)
sed: getopt_ulflags'isation
-rw-r--r--editors/sed.c56
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] */