diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-06-25 15:04:12 +0900 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-06-25 13:31:19 +0200 |
commit | 4dce1b9f059733ed9a263fba7cfa12704e96794a (patch) | |
tree | 5d2ba1f60312acb54cc2cf458e03daa5da7b45f1 /src/udev/scsi_id | |
parent | 7875170f01991a1d28cfe284cc7075630cd69055 (diff) | |
download | systemd-4dce1b9f059733ed9a263fba7cfa12704e96794a.tar.gz |
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.
Diffstat (limited to 'src/udev/scsi_id')
-rw-r--r-- | src/udev/scsi_id/scsi_id.c | 58 | ||||
-rw-r--r-- | src/udev/scsi_id/scsi_id.h | 2 | ||||
-rw-r--r-- | src/udev/scsi_id/scsi_serial.c | 2 |
3 files changed, 30 insertions, 32 deletions
diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c index 943262d436..b2d8154d86 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 2fe64f45f2..9ab3341855 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 4fe725477f..489f5ad16a 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); |