From: Yu Watanabe Date: Fri, 25 Jun 2021 06:04:12 +0000 (+0900) Subject: udev/scsi: use the scsi device type number directly X-Git-Tag: v249-rc2~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4dce1b9f059733ed9a263fba7cfa12704e96794a;p=thirdparty%2Fsystemd.git udev/scsi: use the scsi device type number directly Previously, the value is once stringified, and later again parsed, that is completely redundant. Follow-up for 1001167ca5e4cfdc6230562e4fb9029e5f624d53. Replaces #20013. --- diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c index 943262d4363..b2d8154d86c 100644 --- a/src/udev/scsi_id/scsi_id.c +++ b/src/udev/scsi_id/scsi_id.c @@ -57,36 +57,34 @@ static char model_enc_str[256]; static char revision_str[16]; static char type_str[16]; -static void set_type(const char *from, char *to, size_t len) { - unsigned type_num; - const char *type = "generic"; - - if (safe_atou_full(from, 16, &type_num) >= 0) { - switch (type_num) { - case 0: - type = "disk"; - break; - case 1: - type = "tape"; - break; - case 4: - type = "optical"; - break; - case 5: - type = "cd"; - break; - case 7: - type = "optical"; - break; - case 0xe: - type = "disk"; - break; - case 0xf: - type = "optical"; - break; - default: - break; - } +static void set_type(unsigned type_num, char *to, size_t len) { + const char *type; + + switch (type_num) { + case 0: + type = "disk"; + break; + case 1: + type = "tape"; + break; + case 4: + type = "optical"; + break; + case 5: + type = "cd"; + break; + case 7: + type = "optical"; + break; + case 0xe: + type = "disk"; + break; + case 0xf: + type = "optical"; + break; + default: + type = "generic"; + break; } strscpy(to, len, type); } diff --git a/src/udev/scsi_id/scsi_id.h b/src/udev/scsi_id/scsi_id.h index 2fe64f45f25..9ab33418559 100644 --- a/src/udev/scsi_id/scsi_id.h +++ b/src/udev/scsi_id/scsi_id.h @@ -29,10 +29,10 @@ struct scsi_id_device { char vendor[9]; char model[17]; char revision[5]; - char type[33]; char kernel[64]; char serial[MAX_SERIAL_LEN]; char serial_short[MAX_SERIAL_LEN]; + unsigned type; int use_sg; /* Always from page 0x80 e.g. 'B3G1P8500RWT' - may not be unique */ diff --git a/src/udev/scsi_id/scsi_serial.c b/src/udev/scsi_id/scsi_serial.c index 4fe725477f5..489f5ad16a6 100644 --- a/src/udev/scsi_id/scsi_serial.c +++ b/src/udev/scsi_id/scsi_serial.c @@ -773,7 +773,7 @@ int scsi_std_inquiry(struct scsi_id_device *dev_scsi, const char *devname) { dev_scsi->model[16] = '\0'; memcpy(dev_scsi->revision, buf + 32, 4); dev_scsi->revision[4] = '\0'; - sprintf(dev_scsi->type,"%x", buf[0] & 0x1f); + dev_scsi->type = buf[0] & 0x1f; out: close(fd);