int main(int argc, char **argv) { _cleanup_udev_unref_ struct udev *udev; int retval = 0; char maj_min_dev[MAX_PATH_LEN]; int newargc; char **newargv = NULL; log_open(); udev = udev_new(); if (udev == NULL) goto exit; udev_set_log_fn(udev, log_fn); /* * Get config file options. */ retval = get_file_options(udev, NULL, NULL, &newargc, &newargv); if (retval < 0) { retval = 1; goto exit; } if (retval == 0) { assert(newargv); if (set_options(udev, newargc, newargv, maj_min_dev) < 0) { retval = 2; goto exit; } } /* * Get command line options (overriding any config file settings). */ if (set_options(udev, argc, argv, maj_min_dev) < 0) exit(1); if (!dev_specified) { log_error("no device specified"); retval = 1; goto exit; } retval = scsi_id(udev, maj_min_dev); exit: if (newargv) { free(newargv[0]); free(newargv); } log_close(); return retval; }
static int per_dev_options(struct udev *udev, struct scsi_id_device *dev_scsi, int *good_bad, int *page_code) { int retval; int newargc; char **newargv = NULL; int option; *good_bad = all_good; *page_code = default_page_code; retval = get_file_options(udev, vendor_str, model_str, &newargc, &newargv); optind = 1; /* reset this global extern */ while (retval == 0) { option = getopt_long(newargc, newargv, "bgp:", options, NULL); if (option == -1) break; switch (option) { case 'b': *good_bad = 0; break; case 'g': *good_bad = 1; break; case 'p': if (streq(optarg, "0x80")) { *page_code = PAGE_80; } else if (streq(optarg, "0x83")) { *page_code = PAGE_83; } else if (streq(optarg, "pre-spc3-83")) { *page_code = PAGE_83_PRE_SPC3; } else { log_error("Unknown page code '%s'", optarg); retval = -1; } break; default: log_error("Unknown or bad option '%c' (0x%x)", option, option); retval = -1; break; } } if (newargv) { free(newargv[0]); free(newargv); } return retval; }
int main(int argc, char **argv) { int retval = 0; char maj_min_dev[MAX_PATH_LEN]; int newargc; char **newargv = NULL; log_set_target(LOG_TARGET_AUTO); udev_parse_config(); log_parse_environment(); log_open(); /* * Get config file options. */ retval = get_file_options(NULL, NULL, &newargc, &newargv); if (retval < 0) { retval = 1; goto exit; } if (retval == 0) { assert(newargv); if (set_options(newargc, newargv, maj_min_dev) < 0) { retval = 2; goto exit; } } /* * Get command line options (overriding any config file settings). */ if (set_options(argc, argv, maj_min_dev) < 0) exit(EXIT_FAILURE); if (!dev_specified) { log_error("No device specified."); retval = 1; goto exit; } retval = scsi_id(maj_min_dev); exit: if (newargv) { free(newargv[0]); free(newargv); } log_close(); return retval; }
static int per_dev_options(struct sysfs_device *dev_scsi, int *good_bad, int *page_code) { int retval; int newargc; char **newargv = NULL; const char *vendor, *model, *type; int option; *good_bad = all_good; *page_code = default_page_code; vendor = sysfs_attr_get_value(dev_scsi->devpath, "vendor"); if (!vendor) { info("%s: cannot get vendor attribute", dev_scsi->devpath); return -1; } set_str(vendor_str, vendor, sizeof(vendor_str)-1); model = sysfs_attr_get_value(dev_scsi->devpath, "model"); if (!model) { info("%s: cannot get model attribute\n", dev_scsi->devpath); return -1; } set_str(model_str, model, sizeof(model_str)-1); type = sysfs_attr_get_value(dev_scsi->devpath, "type"); if (!type) { info("%s: cannot get type attribute", dev_scsi->devpath); return -1; } set_type(type_str, type, sizeof(type_str)); type = sysfs_attr_get_value(dev_scsi->devpath, "rev"); if (!type) { info("%s: cannot get type attribute\n", dev_scsi->devpath); return -1; } set_str(revision_str, type, sizeof(revision_str)-1); retval = get_file_options(vendor, model, &newargc, &newargv); optind = 1; /* reset this global extern */ while (retval == 0) { option = getopt(newargc, newargv, dev_short_options); if (option == -1) break; if (optarg) dbg("option '%c' arg '%s'\n", option, optarg); else dbg("option '%c'\n", option); switch (option) { case 'b': *good_bad = 0; break; case 'g': *good_bad = 1; break; case 'p': if (strcmp(optarg, "0x80") == 0) { *page_code = PAGE_80; } else if (strcmp(optarg, "0x83") == 0) { *page_code = PAGE_83; } else if (strcmp(optarg, "pre-spc3-83") == 0) { *page_code = PAGE_83_PRE_SPC3; } else { info("Unknown page code '%s'", optarg); retval = -1; } break; default: info("Unknown or bad option '%c' (0x%x)", option, option); retval = -1; break; } } if (newargv) { free(newargv[0]); free(newargv); } return retval; }