X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Fscsi_id%2Fscsi_id.c;h=943cbb21ca969a01d95ae2b183edd6d52f30f1d8;hp=6334af386b0910c9ee1a09c7ded395cfb513b85e;hb=4435308844467c0dab329531def8dbfa451d9781;hpb=033e9f8cde5a7feec1334888aec69def99c945b5 diff --git a/extras/scsi_id/scsi_id.c b/extras/scsi_id/scsi_id.c index 6334af386..943cbb21c 100644 --- a/extras/scsi_id/scsi_id.c +++ b/extras/scsi_id/scsi_id.c @@ -69,39 +69,7 @@ static void log_fn(struct udev *udev, int priority, vsyslog(priority, format, args); } -static void set_str(char *to, const char *from, size_t count) -{ - size_t i, j, len; - - /* strip trailing whitespace */ - len = strnlen(from, count); - while (len && isspace(from[len-1])) - len--; - - /* strip leading whitespace */ - i = 0; - while (isspace(from[i]) && (i < len)) - i++; - - j = 0; - while (i < len) { - /* substitute multiple whitespace */ - if (isspace(from[i])) { - while (isspace(from[i])) - i++; - to[j++] = '_'; - } - /* skip chars */ - if (from[i] == '/') { - i++; - continue; - } - to[j++] = from[i++]; - } - to[j] = '\0'; -} - -static void set_type(char *to, const char *from, size_t len) +static void set_type(const char *from, char *to, size_t len) { int type_num; char *eptr; @@ -135,8 +103,7 @@ static void set_type(char *to, const char *from, size_t len) break; } } - strncpy(to, type, len); - to[len-1] = '\0'; + util_strlcpy(to, type, len); } /* @@ -385,8 +352,7 @@ static int set_options(struct udev *udev, case 'd': dev_specified = 1; - strncpy(maj_min_dev, optarg, MAX_PATH_LEN); - maj_min_dev[MAX_PATH_LEN-1] = '\0'; + util_strlcpy(maj_min_dev, optarg, MAX_PATH_LEN); break; case 'e': @@ -394,8 +360,7 @@ static int set_options(struct udev *udev, break; case 'f': - strncpy(config_file, optarg, MAX_PATH_LEN); - config_file[MAX_PATH_LEN-1] = '\0'; + util_strlcpy(config_file, optarg, MAX_PATH_LEN); break; case 'g': @@ -461,8 +426,7 @@ static int set_options(struct udev *udev, } if (optind < argc && !dev_specified) { dev_specified = 1; - strncpy(maj_min_dev, argv[optind], MAX_PATH_LEN); - maj_min_dev[MAX_PATH_LEN-1] = '\0'; + util_strlcpy(maj_min_dev, argv[optind], MAX_PATH_LEN); } return 0; } @@ -537,11 +501,13 @@ static int set_inq_values(struct udev *udev, struct scsi_id_device *dev_scsi, co if (retval) return retval; - set_str(vendor_str, dev_scsi->vendor, sizeof(vendor_str)); - set_str(model_str, dev_scsi->model, sizeof(model_str)); - set_type(type_str, dev_scsi->type, sizeof(type_str)); - set_str(revision_str, dev_scsi->revision, sizeof(revision_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)); + udev_util_replace_chars(model_str, NULL); + set_type(dev_scsi->type, type_str, sizeof(type_str)); + udev_util_replace_whitespace(dev_scsi->revision, revision_str, sizeof(revision_str)); + udev_util_replace_chars(revision_str, NULL); return 0; } @@ -583,8 +549,9 @@ static int scsi_id(struct udev *udev, char *maj_min_dev) struct scsi_id_device dev_scsi; int good_dev; int page_code; - char serial_short[MAX_SERIAL_LEN] = ""; + char serial_short[MAX_SERIAL_LEN]; + serial_short[0] = '\0'; set_inq_values(udev, &dev_scsi, maj_min_dev); /* get per device (vendor + model) options from the config file */ @@ -607,9 +574,11 @@ static int scsi_id(struct udev *udev, char *maj_min_dev) printf("ID_VENDOR=%s\n", vendor_str); printf("ID_MODEL=%s\n", model_str); printf("ID_REVISION=%s\n", revision_str); - set_str(serial_str, dev_scsi.serial, sizeof(serial_str)); + udev_util_replace_whitespace(dev_scsi.serial, serial_str, sizeof(serial_str)); + udev_util_replace_chars(serial_str, NULL); printf("ID_SERIAL=%s\n", serial_str); - set_str(serial_str, serial_short, sizeof(serial_str)); + udev_util_replace_whitespace(serial_short, serial_str, sizeof(serial_str)); + udev_util_replace_chars(serial_str, NULL); printf("ID_SERIAL_SHORT=%s\n", serial_str); printf("ID_TYPE=%s\n", type_str); } else {