last_patch89 from vodz:

Manuel,

    I rewrite bb_getopt_ulflags() function for more universal usage.
    My version support now:
    - options with arguments (optional arg as GNU extension also)
    - complementaly and/or incomplementaly and/or incongruously and/or list
    options
    - long_opt (all applets may have long option, add supporting is trivial)
    This realisation full compatibile from your version.
    Code size grow 480 bytes, but only coreutils/* over compensate this size
    after using new function. Last patch reduced over 800 bytes and not full
    applied to all. "mkdir" and "mv" applets have long_opt now for demonstrate
    trivial addition support long_opt with usage new bb_getopt_ulflags().
    Complementaly and/or incomplementaly and/or incongruously and/or list options
    logic is not trivial, but new "cut" and "grep" applets using this logic
    for examples with full demostrating. New "grep" applet reduced over 300
    bytes.

    Mark,
    Also. I removed bug from "grep" applet.
    $ echo a b | busybox grep -e a b
    a b
    a b
    But right is printing one only.

    --w
    vodz
This commit is contained in:
Eric Andersen
2003-06-20 09:01:58 +00:00
parent dfce3536ac
commit 8876fb2f59
19 changed files with 592 additions and 533 deletions

View File

@@ -55,41 +55,27 @@ extern int df_main(int argc, char **argv)
unsigned long df_disp_hr = KILOBYTE;
#endif
int status = EXIT_SUCCESS;
int opt;
unsigned long opt;
FILE *mount_table;
struct mntent *mount_entry;
struct statfs s;
static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */
const char *disp_units_hdr = hdr_1k;
while ((opt = getopt(argc, argv, "k"
#ifdef CONFIG_FEATURE_HUMAN_READABLE
"hm"
#endif
)) > 0)
{
switch (opt) {
#ifdef CONFIG_FEATURE_HUMAN_READABLE
case 'h':
bb_opt_complementaly = "h-km:k-hm:m-hk";
opt = bb_getopt_ulflags(argc, argv, "hmk");
if(opt & 1) {
df_disp_hr = 0;
disp_units_hdr = " Size";
break;
case 'm':
}
if(opt & 2) {
df_disp_hr = MEGABYTE;
disp_units_hdr = "1M-blocks";
break;
#endif
case 'k':
/* default display is kilobytes */
#ifdef CONFIG_FEATURE_HUMAN_READABLE
df_disp_hr = KILOBYTE;
disp_units_hdr = hdr_1k;
#endif
break;
default:
bb_show_usage();
}
}
#else
opt = bb_getopt_ulflags(argc, argv, "k");
#endif
bb_printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n",
"", disp_units_hdr);