diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-22 09:02:30 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-22 09:02:30 +0000 |
| commit | 099efbf99e2cedfb1d0edf10c9447297554cf584 (patch) | |
| tree | 16e05b44895348c8c53a73e07f452396d5ec2fff | |
| parent | 750fc6d7bb6dc4c57399696e5e05c75c6cdd4aa5 (diff) | |
| download | busybox-w32-099efbf99e2cedfb1d0edf10c9447297554cf584.tar.gz busybox-w32-099efbf99e2cedfb1d0edf10c9447297554cf584.tar.bz2 busybox-w32-099efbf99e2cedfb1d0edf10c9447297554cf584.zip | |
awk: getopt_ulflags'isation
| -rw-r--r-- | editors/awk.c | 64 |
1 files changed, 27 insertions, 37 deletions
diff --git a/editors/awk.c b/editors/awk.c index 6e81aa8f4..c934fe0df 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
| @@ -2605,6 +2605,8 @@ static rstream *next_input_file(void) | |||
| 2605 | 2605 | ||
| 2606 | int awk_main(int argc, char **argv) | 2606 | int awk_main(int argc, char **argv) |
| 2607 | { | 2607 | { |
| 2608 | unsigned long opt; | ||
| 2609 | char *opt_F, *opt_v, *opt_W; | ||
| 2608 | char *s, *s1; | 2610 | char *s, *s1; |
| 2609 | int i, j, c, flen; | 2611 | int i, j, c, flen; |
| 2610 | var *v; | 2612 | var *v; |
| @@ -2660,49 +2662,37 @@ keep_going: | |||
| 2660 | free(s); | 2662 | free(s); |
| 2661 | } | 2663 | } |
| 2662 | 2664 | ||
| 2663 | while((c = getopt(argc, argv, "F:v:f:W:")) != EOF) { | 2665 | opt = bb_getopt_ulflags(argc, argv, "F:v:f:W:", &opt_F, &opt_v, &programname, &opt_W); |
| 2664 | switch (c) { | 2666 | if (opt & 0x1) setvar_s(V[FS], opt_F); // -F |
| 2665 | case 'F': | 2667 | if (opt & 0x2) if (!is_assignment(opt_v)) bb_show_usage(); // -v |
| 2666 | setvar_s(V[FS], optarg); | 2668 | if (opt & 0x4) { // -f |
| 2667 | break; | 2669 | from_file = TRUE; |
| 2668 | case 'v': | 2670 | F = afopen(programname, "r"); |
| 2669 | if (! is_assignment(optarg)) | 2671 | s = NULL; |
| 2670 | bb_show_usage(); | 2672 | /* one byte is reserved for some trick in next_token */ |
| 2671 | break; | 2673 | if (fseek(F, 0, SEEK_END) == 0) { |
| 2672 | case 'f': | 2674 | flen = ftell(F); |
| 2673 | from_file = TRUE; | 2675 | s = (char *)xmalloc(flen+4); |
| 2674 | F = afopen(programname = optarg, "r"); | 2676 | fseek(F, 0, SEEK_SET); |
| 2675 | s = NULL; | 2677 | i = 1 + fread(s+1, 1, flen, F); |
| 2676 | /* one byte is reserved for some trick in next_token */ | 2678 | } else { |
| 2677 | if (fseek(F, 0, SEEK_END) == 0) { | 2679 | for (i=j=1; j>0; i+=j) { |
| 2678 | flen = ftell(F); | 2680 | s = (char *)xrealloc(s, i+4096); |
| 2679 | s = (char *)xmalloc(flen+4); | 2681 | j = fread(s+i, 1, 4094, F); |
| 2680 | fseek(F, 0, SEEK_SET); | 2682 | } |
| 2681 | i = 1 + fread(s+1, 1, flen, F); | ||
| 2682 | } else { | ||
| 2683 | for (i=j=1; j>0; i+=j) { | ||
| 2684 | s = (char *)xrealloc(s, i+4096); | ||
| 2685 | j = fread(s+i, 1, 4094, F); | ||
| 2686 | } | ||
| 2687 | } | ||
| 2688 | s[i] = '\0'; | ||
| 2689 | fclose(F); | ||
| 2690 | parse_program(s+1); | ||
| 2691 | free(s); | ||
| 2692 | break; | ||
| 2693 | case 'W': | ||
| 2694 | bb_error_msg("Warning: unrecognized option '-W %s' ignored", optarg); | ||
| 2695 | break; | ||
| 2696 | |||
| 2697 | default: | ||
| 2698 | bb_show_usage(); | ||
| 2699 | } | 2683 | } |
| 2684 | s[i] = '\0'; | ||
| 2685 | fclose(F); | ||
| 2686 | parse_program(s+1); | ||
| 2687 | free(s); | ||
| 2700 | } | 2688 | } |
| 2689 | if (opt & 0x8) // -W | ||
| 2690 | bb_error_msg("Warning: unrecognized option '-W %s' ignored", opt_W); | ||
| 2701 | 2691 | ||
| 2702 | if (!from_file) { | 2692 | if (!from_file) { |
| 2703 | if (argc == optind) | 2693 | if (argc == optind) |
| 2704 | bb_show_usage(); | 2694 | bb_show_usage(); |
| 2705 | programname="cmd. line"; | 2695 | programname = "cmd. line"; |
| 2706 | parse_program(argv[optind++]); | 2696 | parse_program(argv[optind++]); |
| 2707 | 2697 | ||
| 2708 | } | 2698 | } |
