X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fscsi_id%2Fscsi_id.c;h=5c406585561a32fdce20b5684898d2bb72265014;hb=0ec5b5e1429307fa7573aaa9b8f25fbd9b1d71d5;hp=21b7cbeaec2a36f128efce8e0011199aa25f3e87;hpb=caf4c97a2c443eeb8eebe7d42806eaca500db223;p=elogind.git diff --git a/extras/scsi_id/scsi_id.c b/extras/scsi_id/scsi_id.c index 21b7cbeae..5c4065855 100644 --- a/extras/scsi_id/scsi_id.c +++ b/extras/scsi_id/scsi_id.c @@ -1,4 +1,5 @@ -/* +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * * scsi_id.c * * Main section of the scsi_id program @@ -27,7 +28,8 @@ #include #include -#include "../../udev/udev.h" +#include "libudev.h" +#include "libudev-private.h" #include "scsi_id.h" static const struct option options[] = { @@ -59,6 +61,8 @@ static int reformat_serial; static int export; static char vendor_str[64]; static char model_str[64]; +static char vendor_enc_str[256]; +static char model_enc_str[256]; static char revision_str[16]; static char type_str[16]; @@ -103,7 +107,7 @@ static void set_type(const char *from, char *to, size_t len) break; } } - util_strlcpy(to, type, len); + util_strscpy(to, len, type); } /* @@ -352,7 +356,7 @@ static int set_options(struct udev *udev, case 'd': dev_specified = 1; - util_strlcpy(maj_min_dev, optarg, MAX_PATH_LEN); + util_strscpy(maj_min_dev, MAX_PATH_LEN, optarg); break; case 'e': @@ -360,7 +364,7 @@ static int set_options(struct udev *udev, break; case 'f': - util_strlcpy(config_file, optarg, MAX_PATH_LEN); + util_strscpy(config_file, MAX_PATH_LEN, optarg); break; case 'g': @@ -426,7 +430,7 @@ static int set_options(struct udev *udev, } if (optind < argc && !dev_specified) { dev_specified = 1; - util_strlcpy(maj_min_dev, argv[optind], MAX_PATH_LEN); + util_strscpy(maj_min_dev, MAX_PATH_LEN, argv[optind]); } return 0; } @@ -501,6 +505,9 @@ static int set_inq_values(struct udev *udev, struct scsi_id_device *dev_scsi, co if (retval) return retval; + udev_util_encode_string(dev_scsi->vendor, vendor_enc_str, sizeof(vendor_enc_str)); + udev_util_encode_string(dev_scsi->model, model_enc_str, sizeof(model_enc_str)); + udev_util_replace_whitespace(dev_scsi->vendor, vendor_str, sizeof(vendor_str)); udev_util_replace_chars(vendor_str, NULL); udev_util_replace_whitespace(dev_scsi->model, model_str, sizeof(model_str)); @@ -511,31 +518,6 @@ static int set_inq_values(struct udev *udev, struct scsi_id_device *dev_scsi, co return 0; } -/* - * format_serial: replace to whitespaces by underscores for calling - * programs that use the serial for device naming (multipath, Suse - * naming, etc...) - */ -static void format_serial(char *serial) -{ - char *p = serial, *q; - - q = p; - while (*p != '\0') { - if (isspace(*p)) { - if (q > serial && q[-1] != '_') { - *q = '_'; - q++; - } - } else { - *q = *p; - q++; - } - p++; - } - *q = '\0'; -} - /* * scsi_id: try to get an id, if one is found, printf it to stdout. * returns a value passed to exit() - 0 if printed an id, else 1. @@ -568,8 +550,11 @@ static int scsi_id(struct udev *udev, char *maj_min_dev) if (export) { char serial_str[MAX_SERIAL_LEN]; + printf("ID_SCSI=1\n"); printf("ID_VENDOR=%s\n", vendor_str); + printf("ID_VENDOR_ENC=%s\n", vendor_enc_str); printf("ID_MODEL=%s\n", model_str); + printf("ID_MODEL_ENC=%s\n", model_enc_str); printf("ID_REVISION=%s\n", revision_str); printf("ID_TYPE=%s\n", type_str); if (dev_scsi.serial[0] != '\0') { @@ -580,6 +565,18 @@ static int scsi_id(struct udev *udev, char *maj_min_dev) udev_util_replace_chars(serial_str, NULL); printf("ID_SERIAL_SHORT=%s\n", serial_str); } + if (dev_scsi.wwn[0] != '\0') { + printf("ID_WWN=0x%s\n", dev_scsi.wwn); + if (dev_scsi.wwn_vendor_extension[0] != '\0') { + printf("ID_WWN_VENDOR_EXTENSION=0x%s\n", dev_scsi.wwn_vendor_extension); + printf("ID_WWN_WITH_EXTENSION=0x%s%s\n", dev_scsi.wwn, dev_scsi.wwn_vendor_extension); + } else { + printf("ID_WWN_WITH_EXTENSION=0x%s\n", dev_scsi.wwn); + } + } + if (dev_scsi.unit_serial_number[0] != '\0') { + printf("ID_SCSI_SERIAL=%s\n", dev_scsi.unit_serial_number); + } goto out; } @@ -587,8 +584,16 @@ static int scsi_id(struct udev *udev, char *maj_min_dev) retval = 1; goto out; } - if (reformat_serial) - format_serial(dev_scsi.serial); + + if (reformat_serial) { + char serial_str[MAX_SERIAL_LEN]; + + udev_util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)); + udev_util_replace_chars(serial_str, NULL); + printf("%s\n", serial_str); + goto out; + } + printf("%s\n", dev_scsi.serial); out: return retval; @@ -606,7 +611,7 @@ int main(int argc, char **argv) if (udev == NULL) goto exit; - logging_init("scsi_id"); + udev_log_init("scsi_id"); udev_set_log_fn(udev, log_fn); /* @@ -642,6 +647,6 @@ int main(int argc, char **argv) exit: udev_unref(udev); - logging_close(); + udev_log_close(); return retval; }