Cleanup patch from tito.
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)
| @@ -25,6 +25,7 @@ | |
| #include <sys/time.h> | |
| #include <sys/times.h> | |
| #include <sys/mount.h> | |
| + | #include <getopt.h> |
| #include "busybox.h" | |
| #include <linux/types.h> | |
| #include <linux/hdreg.h> | |
| @@ -567,13 +568,6 @@ static uint16_t check_if_maj_and_set_val(uint16_t a, uint16_t b) | |
| return a; | |
| } | |
| - | static unsigned long int set_flag(char *p, char max) |
| - | { |
| - | if (*p >= '0' && *p <= max ) |
| - | return 1; |
| - | return 0; |
| - | } |
| - | |
| /* end of busybox specific stuff */ | |
| #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | |
| @@ -633,7 +627,6 @@ static void print_ascii(uint16_t *p, uint8_t length) { | |
| others, though, were declared in hdparm.c with global scope; since other | |
| functions in that file have static (file) scope, I assume the difference is | |
| intentional. */ | |
| - | |
| static void identify(uint16_t *id_supplied) | |
| { | |
| uint16_t buf[256]; | |
| @@ -1240,17 +1233,17 @@ static unsigned long set_apmmode, get_apmmode, apmmode; | |
| static int get_IDentity; | |
| #endif | |
| #ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF | |
| - | static int unregister_hwif; |
| - | static int hwif; |
| + | static unsigned long unregister_hwif; |
| + | static unsigned long hwif; |
| #endif | |
| #ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF | |
| - | static int scan_hwif; |
| - | static int hwif_data; |
| - | static int hwif_ctrl; |
| - | static int hwif_irq; |
| + | static unsigned long scan_hwif; |
| + | static unsigned long hwif_data; |
| + | static unsigned long hwif_ctrl; |
| + | static unsigned long hwif_irq; |
| #endif | |
| #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | |
| - | static int set_busstate, get_busstate, busstate; |
| + | static unsigned long set_busstate, get_busstate, busstate; |
| #endif | |
| static int reread_partn; | |
| @@ -1258,7 +1251,7 @@ static int reread_partn; | |
| static int perform_reset; | |
| #endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */ | |
| #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF | |
| - | static int perform_tristate, tristate; |
| + | static unsigned long perform_tristate, tristate; |
| #endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */ | |
| // Historically, if there was no HDIO_OBSOLETE_IDENTITY, then | |
| @@ -1839,14 +1832,14 @@ static void process_dev(char *devname) | |
| #ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF | |
| if (unregister_hwif) | |
| { | |
| - | printf(" attempting to unregister hwif#%u\n", hwif); |
| + | printf(" attempting to unregister hwif#%lu\n", hwif); |
| bb_ioctl(fd, HDIO_UNREGISTER_HWIF,(int *)(unsigned long)hwif,"HDIO_UNREGISTER_HWIF"); | |
| } | |
| #endif | |
| #ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF | |
| if (scan_hwif) | |
| { | |
| - | printf(" attempting to scan hwif (0x%x, 0x%x, %u)\n", hwif_data, hwif_ctrl, hwif_irq); |
| + | printf(" attempting to scan hwif (0x%lx, 0x%lx, %lu)\n", hwif_data, hwif_ctrl, hwif_irq); |
| args[0] = hwif_data; | |
| args[1] = hwif_ctrl; | |
| args[2] = hwif_irq; | |
| @@ -2246,7 +2239,7 @@ static void process_dev(char *devname) | |
| { | |
| if (get_busstate) | |
| { | |
| - | printf(" setting bus state to %d", busstate); |
| + | printf(" setting bus state to %ld", busstate); |
| bus_state_value(busstate); | |
| } | |
| bb_ioctl(fd, HDIO_SET_BUSSTATE, (int *)(unsigned long)busstate, "HDIO_SET_BUSSTATE"); | |
| @@ -2275,35 +2268,6 @@ static void process_dev(char *devname) | |
| close(fd); | |
| } | |
| - | static char * GET_NUMBER(char *p, unsigned long *flag, unsigned long *num) |
| - | { |
| - | *num = 0; |
| - | while (isdigit(*p)) { |
| - | *flag = 1; |
| - | *num = (*num * 10) + (*p++ - '0'); |
| - | } |
| - | return p; |
| - | } |
| - | |
| - | static char * GET_STRING(char *p, unsigned long *flag, int *num) |
| - | { |
| - | char *tmpstr; |
| - | char name[32]; |
| - | tmpstr = name; |
| - | tmpstr[0] = '\0'; |
| - | while (isalnum(*p) && (tmpstr - name) < 31) { |
| - | tmpstr[0] = *p++; |
| - | tmpstr[1] = '\0'; |
| - | ++tmpstr; |
| - | } |
| - | *num = translate_xfermode(name); |
| - | if (*num == -1) |
| - | *flag = 0; |
| - | else |
| - | *flag = 1; |
| - | return p; |
| - | } |
| - | |
| #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY | |
| static int fromhex(unsigned char c) | |
| { | |
| @@ -2333,351 +2297,166 @@ static void identify_from_stdin(void) | |
| } | |
| #endif | |
| - | static void missing_arg(int arg, char c, char* add) |
| + | /* busybox specific stuff */ |
| + | static void parse_opts(int flag, unsigned long *get, unsigned long *set, unsigned long *value, int min, int max) |
| { | |
| - | if (!arg) |
| - | bb_error_msg("-%c: missing value %s", c, (add!=NULL)? add :""); |
| + | if (flag) { |
| + | /* noisy is a global var */ |
| + | if (get) { /* *get is initialized to 0 */ |
| + | *get = noisy; |
| + | noisy = 1; |
| + | } |
| + | if (optarg) { |
| + | *set = 1; |
| + | *value = bb_xgetlarg(optarg, 10, min, max); |
| + | } |
| + | } |
| } | |
| - | /* our main() routine: */ |
| - | int hdparm_main(int argc, char **argv) |
| + | #ifdef HDIO_DRIVE_CMD |
| + | static void parse_opts_v2(int flag, unsigned long *get, unsigned long *set) |
| { | |
| - | char c, *p; |
| + | if (flag) { |
| + | /* noisy is a global var */ |
| + | *get = noisy; |
| + | noisy = 1; |
| + | *set = 1; |
| + | } |
| + | } |
| + | #endif |
| - | ++argv; |
| - | if (!--argc) |
| - | bb_show_usage(); |
| + | static void parse_opts_v3(int flag, unsigned long *get, unsigned long *set, int *value) |
| + | { |
| + | if (flag) { |
| + | /* noisy is a global var */ |
| + | *get = noisy; |
| + | noisy = 1; |
| + | if (optarg) { |
| + | *set = ((*value = translate_xfermode(optarg)) > -1); |
| + | } |
| + | } |
| + | } |
| - | while (argc--) |
| - | { |
| - | if (ENABLE_FEATURE_HDPARM_GET_IDENTITY && !strcmp("-Istdin", *argv)) |
| - | identify_from_stdin(); |
| - | p = *argv++; |
| - | if (*p == '-') |
| - | { |
| - | if (!*++p) |
| - | bb_show_usage(); |
| - | while ((c = *p++)) |
| - | { |
| - | ++flagcount; |
| - | switch (c) |
| - | { |
| - | case 'V': |
| - | /*bb_error_msg_and_die("%s", VERSION);*/ |
| - | /* We have to return 0 here and not 1 */ |
| - | printf("%s %s\n",bb_applet_name, VERSION); |
| - | return EXIT_SUCCESS; |
| - | case 'v': |
| - | verbose = 1; |
| - | break; |
| - | #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY |
| - | case 'I': |
| - | get_IDentity = 1; |
| - | break; |
| - | case 'i': |
| - | get_identity = 1; |
| - | break; |
| + | /*-------------------------------------*/ |
| + | /* getopt long options */ |
| + | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
| + | static const struct option HDPARM_LONG_OPT[] = |
| + | { |
| + | {"Istdin", 0, NULL, '\256'}, |
| + | {NULL, 0, NULL, 0} |
| + | }; |
| + | #else |
| + | #define HDPARM_LONG_OPT NULL |
| #endif | |
| - | case 'g': |
| - | get_geom = 1; |
| - | break; |
| - | case 'f': |
| - | do_flush = 1; |
| - | break; |
| - | case 'q': |
| - | quiet = 1; |
| - | noisy = 0; |
| - | break; |
| - | case 'u': |
| - | get_unmask = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_unmask = set_flag(p,'1'))==1) |
| - | unmask = *p++ - '0'; |
| - | break; |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA |
| - | case 'd': |
| - | get_dma = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_dma = set_flag(p,'9'))==1) |
| - | dma = *p++ - '0'; |
| - | break; |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA */ |
| - | case 'n': |
| - | get_nowerr = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_nowerr = set_flag(p,'1'))==1) |
| - | nowerr = *p++ - '0'; |
| - | break; |
| - | case 'p': |
| - | noisy_piomode = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_STRING(p,&set_piomode,&piomode); |
| - | break; |
| - | case 'r': |
| - | get_readonly = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_readonly = set_flag(p,'1'))==1) |
| - | readonly = *p++ - '0'; |
| - | break; |
| - | case 'm': |
| - | get_mult = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_mult,&mult); |
| - | break; |
| - | case 'c': |
| - | get_io32bit = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_io32bit,&io32bit); |
| - | break; |
| + | /*-------------------------------------*/ |
| + | /* getopt short options */ |
| + | static const char hdparm_options[]= "Vvgfqu::n::p:r::m::c::k::a::B:tTh"\ |
| + | USE_FEATURE_HDPARM_GET_IDENTITY("\256iI") |
| + | USE_FEATURE_HDPARM_HDIO_GETSET_DMA("d::") |
| #ifdef HDIO_DRIVE_CMD | |
| - | case 'S': |
| - | get_standby = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_standby,&standby_requested); |
| - | missing_arg(set_standby, c, NULL); |
| - | break; |
| - | |
| - | case 'D': |
| - | get_defects = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_defects,&defects); |
| - | missing_arg(set_defects, c, NULL); |
| - | break; |
| - | case 'P': |
| - | get_prefetch = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_prefetch,&prefetch); |
| - | missing_arg(set_prefetch, c, NULL); |
| - | break; |
| - | |
| - | case 'X': |
| - | get_xfermode = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_STRING(p,&set_xfermode,&xfermode_requested); |
| - | missing_arg(set_xfermode, c, NULL); |
| - | break; |
| - | |
| - | case 'K': |
| - | get_dkeep = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_dkeep = set_flag(p,'1'))==1) |
| - | dkeep = *p++ - '0'; |
| - | else |
| - | goto missing_arg_error; |
| - | break; |
| - | |
| - | case 'A': |
| - | get_lookahead = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_lookahead = set_flag(p,'1'))==1) |
| - | lookahead = *p++ - '0'; |
| - | else |
| - | goto missing_arg_error; |
| - | break; |
| - | |
| - | case 'L': |
| - | get_doorlock = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_doorlock = set_flag(p,'1'))==1) |
| - | doorlock = *p++ - '0'; |
| - | else |
| - | goto missing_arg_error; |
| - | break; |
| - | |
| - | case 'W': |
| - | get_wcache = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_wcache = set_flag(p,'1'))==1) |
| - | wcache = *p++ - '0'; |
| - | else |
| - | missing_arg_error: |
| - | missing_arg(1, c, "(0/1)"); |
| - | break; |
| - | |
| - | case 'C': |
| - | get_powermode = noisy; |
| - | noisy = 1; |
| - | break; |
| - | |
| - | case 'y': |
| - | get_standbynow = noisy; |
| - | noisy = 1; |
| - | set_standbynow = 1; |
| - | break; |
| - | |
| - | case 'Y': |
| - | get_sleepnow = noisy; |
| - | noisy = 1; |
| - | set_sleepnow = 1; |
| - | break; |
| - | |
| - | case 'z': |
| - | reread_partn = 1; |
| - | break; |
| - | |
| - | case 'Z': |
| - | get_seagate = noisy; |
| - | noisy = 1; |
| - | set_seagate = 1; |
| - | break; |
| - | #endif /* HDIO_DRIVE_CMD */ |
| - | case 'k': |
| - | get_keep = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_keep = set_flag(p,'1'))==1) |
| - | keep = *p++ - '0'; |
| - | break; |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF |
| - | case 'U': |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if (! p) |
| - | goto expected_hwif_error; /* "expected hwif_nr" */ |
| - | |
| - | sscanf(p++, "%i", &hwif); |
| - | |
| - | unregister_hwif = 1; |
| - | break; |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF */ |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF |
| - | case 'R': |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if (! p) |
| - | goto expected_hwif_error; /* "expected hwif_data" */ |
| - | |
| - | sscanf(p++, "%i", &hwif_data); |
| - | |
| - | if (argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | else |
| - | goto expected_hwif_error; /* "expected hwif_ctrl" */ |
| - | |
| - | sscanf(p, "%i", &hwif_ctrl); |
| - | |
| - | if (argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | else |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF */ |
| - | #if defined CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF || defined CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF |
| - | expected_hwif_error: |
| - | bb_error_msg_and_die("expected hwif value"); /* "expected hwif_irq" */ |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF || CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF */ |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF |
| - | |
| - | sscanf(p, "%i", &hwif_irq); |
| - | |
| - | *p = '\0'; |
| - | |
| - | scan_hwif = 1; |
| - | break; |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF */ |
| - | case 'Q': |
| + | "S::D::P::X::K::A::L::W::CyYzZ" |
| + | #endif |
| + | USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF("U:") |
| #ifdef HDIO_GET_QDMA | |
| - | get_dma_q = noisy; |
| - | noisy = 1; |
| #ifdef HDIO_SET_QDMA | |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_dma_q,&dma_q); |
| - | #ifdef HDIO_GET_QDMA |
| - | dma_q = -dma_q; |
| - | #endif |
| + | "Q:" |
| + | #else |
| + | "Q" |
| #endif | |
| #endif | |
| - | break; |
| + | USE_FEATURE_HDPARM_HDIO_DRIVE_RESET("w") |
| + | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF("x::b:") |
| + | USE_FEATURE_HDPARM_HDIO_SCAN_HWIF("R:"); |
| + | /*-------------------------------------*/ |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET |
| - | case 'w': |
| - | perform_reset = 1; |
| - | break; |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET */ |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
| - | case 'x': |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((perform_tristate = set_flag(p,'1'))==1) |
| - | tristate = *p++ - '0'; |
| - | else |
| - | missing_arg(1, c, "(0/1)"); |
| - | break; |
| - | |
| - | #endif /* CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF */ |
| - | case 'a': |
| - | get_readahead = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_readahead,&Xreadahead); |
| - | break; |
| - | case 'B': |
| - | get_apmmode = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isalnum(**argv)) |
| - | p = *argv++, --argc; |
| - | p=GET_NUMBER(p,&set_apmmode,&apmmode); |
| - | missing_arg(set_apmmode, c, "(1-255)"); |
| - | break; |
| - | case 't': |
| - | do_timings = 1; |
| - | do_flush = 1; |
| - | break; |
| - | case 'T': |
| - | do_ctimings = 1; |
| - | do_flush = 1; |
| - | break; |
| - | #ifdef CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF |
| - | case 'b': |
| - | get_busstate = noisy; |
| - | noisy = 1; |
| - | if (!*p && argc && isdigit(**argv)) |
| - | p = *argv++, --argc; |
| - | if ((set_busstate = set_flag(p,'2'))==1) |
| - | busstate = *p++ - '0'; |
| - | break; |
| + | /* our main() routine: */ |
| + | int hdparm_main(int argc, char **argv) ATTRIBUTE_NORETURN; |
| + | int hdparm_main(int argc, char **argv) |
| + | { |
| + | int c; |
| + | |
| + | while ((c = getopt_long (argc, argv, hdparm_options, HDPARM_LONG_OPT , NULL)) >= 0) { |
| + | /* When no flags are given (flagcount = 0), -acdgkmnru is assumed. */ |
| + | flagcount++; |
| + | #if ENABLE_FEATURE_HDPARM_GET_IDENTITY |
| + | if (c == '\256') { |
| + | identify_from_stdin(); /* EXIT */ |
| + | } |
| #endif | |
| - | case 'h': |
| - | default: |
| - | bb_show_usage(); |
| - | } |
| - | } |
| - | if (!argc) |
| - | bb_show_usage(); |
| - | } else { |
| - | process_dev(p); |
| + | if (c == 'V') { |
| + | printf("%s %s\n",bb_applet_name, VERSION); |
| + | exit(EXIT_SUCCESS); |
| + | } |
| + | |
| + | verbose = (c == 'v'); |
| + | USE_FEATURE_HDPARM_GET_IDENTITY(get_IDentity = (c == 'I')); |
| + | USE_FEATURE_HDPARM_GET_IDENTITY(get_identity = (c == 'i')); |
| + | get_geom = (c == 'g'); |
| + | do_flush = (c == 'f'); |
| + | if (c == 'q') { |
| + | quiet = 1; |
| + | noisy = 0; |
| + | } |
| + | parse_opts((c == 'u'), &get_unmask, &set_unmask, &unmask, 0, 1); |
| + | USE_FEATURE_HDPARM_HDIO_GETSET_DMA(parse_opts((c == 'd'), &get_dma, &set_dma, &dma, 0, 9)); |
| + | parse_opts((c == 'n'), &get_nowerr, &set_nowerr, &nowerr, 0, 1); |
| + | parse_opts_v3((c == 'p'), &noisy_piomode, &set_piomode, &piomode); |
| + | parse_opts((c == 'r'), &get_readonly, &set_readonly, &readonly, 0, 1); |
| + | parse_opts((c == 'm'), &get_mult, &set_mult, &mult, 0, INT_MAX /*32*/); |
| + | parse_opts((c == 'c'), &get_io32bit, &set_io32bit, &io32bit, 0, INT_MAX /*8*/); |
| + | parse_opts((c == 'k'), &get_keep, &set_keep, &keep, 0, 1); |
| + | parse_opts((c == 'a'), &get_readahead, &set_readahead, &Xreadahead, 0, INT_MAX); |
| + | parse_opts((c == 'B'), &get_apmmode, &set_apmmode, &apmmode, 1, 255); |
| + | do_flush |= do_timings = (c == 't'); |
| + | do_flush |= do_ctimings = (c == 'T'); |
| + | #ifdef HDIO_DRIVE_CMD |
| + | parse_opts((c == 'S'), &get_standby, &set_standby, &standby_requested, 0, INT_MAX); |
| + | parse_opts((c == 'D'), &get_defects, &set_defects, &defects, 0, INT_MAX); |
| + | parse_opts((c == 'P'), &get_prefetch, &set_prefetch, &prefetch, 0, INT_MAX); |
| + | parse_opts_v3((c == 'X'), &get_xfermode, &set_xfermode, &xfermode_requested); |
| + | parse_opts((c == 'K'), &get_dkeep, &set_dkeep, &prefetch, 0, 1); |
| + | parse_opts((c == 'A'), &get_lookahead, &set_lookahead, &lookahead, 0, 1); |
| + | parse_opts((c == 'L'), &get_doorlock, &set_doorlock, &doorlock, 0, 1); |
| + | parse_opts((c == 'W'), &get_wcache, &set_wcache, &wcache, 0, 1); |
| + | parse_opts_v3((c == 'C'), &get_powermode, NULL, NULL); |
| + | parse_opts_v2((c == 'y'), &get_standbynow, &set_standbynow); |
| + | parse_opts_v2((c == 'Y'), &get_sleepnow, &set_sleepnow); |
| + | reread_partn = (c == 'z'); |
| + | parse_opts_v2((c == 'Z'), &get_seagate, &set_seagate); |
| + | #endif |
| + | USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF(parse_opts((c == 'U'), NULL, &unregister_hwif, &hwif, 0, INT_MAX)); |
| + | #ifdef HDIO_GET_QDMA |
| + | #ifdef HDIO_SET_QDMA |
| + | parse_opts((c == 'Q'), &get_dma_q, &set_dma_q, &dma_q, 0, INT_MAX); |
| + | #else |
| + | parse_opts((c == 'Q'), &get_dma_q, NULL, NULL, 0, 0); |
| + | #endif |
| + | #endif |
| + | USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( perform_reset = (c == 'r')); |
| + | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(parse_opts((c == 'x'), NULL, &perform_tristate, &tristate, 0, 1)); |
| + | USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF(parse_opts((c == 'b'), &get_busstate, &set_busstate, &busstate, 0, 2)); |
| + | #if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF |
| + | if (c == 'R') { |
| + | parse_opts((c == 'R'), NULL, &scan_hwif, &hwif_data, 0, INT_MAX); |
| + | hwif_ctrl = bb_xgetlarg((argv[optind]) ? argv[optind] : "", 10, 0, INT_MAX); |
| + | hwif_irq = bb_xgetlarg((argv[optind+1]) ? argv[optind+1] : "", 10, 0, INT_MAX); |
| + | /* Move past the 2 additional arguments */ |
| + | argv += 2; |
| + | argc -= 2; |
| } | |
| + | #endif |
| + | } |
| + | |
| + | argc -= optind; |
| + | argv += optind; |
| + | |
| + | if (argc < 1) { |
| + | bb_show_usage(); |
| + | } |
| + | |
| + | while (argc--) { |
| + | process_dev(*argv); |
| + | argv++; |
| } | |
| - | return 0 ; |
| + | exit(EXIT_SUCCESS); |
| } | |