示例#1
0
文件: scsi_id.c 项目: dbruenig/eudev
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;
}
示例#2
0
文件: scsi_id.c 项目: dankor/systemd
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;
}
示例#3
0
文件: scsi_id.c 项目: l10n-tw/systemd
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;
}
示例#4
0
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;
}