summaryrefslogtreecommitdiff
path: root/src/udev/scsi_id
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-06-25 15:04:12 +0900
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-06-25 13:31:19 +0200
commit4dce1b9f059733ed9a263fba7cfa12704e96794a (patch)
tree5d2ba1f60312acb54cc2cf458e03daa5da7b45f1 /src/udev/scsi_id
parent7875170f01991a1d28cfe284cc7075630cd69055 (diff)
downloadsystemd-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.c58
-rw-r--r--src/udev/scsi_id/scsi_id.h2
-rw-r--r--src/udev/scsi_id/scsi_serial.c2
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);