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"; +static void set_type(unsigned type_num, char *to, size_t len) { + const char *type; - 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; - } + 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);