chiark / gitweb /
volume_id: fix sqashfs detection
[elogind.git] / extras / scsi_id / scsi_serial.c
index 513d922559a34046b3506404aff09c4f2a4d9e08..c84f41e0437e9c0d84573b8adc5adcb3f02f7a35 100644 (file)
@@ -732,6 +732,38 @@ static int do_scsi_page80_inquiry(struct sysfs_device *dev_scsi, int fd,
        for (i = 4; i < len + 4; i++, ser_ind++)
                serial[ser_ind] = buf[i];
        memcpy(serial_short, &buf[4], len);
+       serial_short[len] = '\0';
+       return 0;
+}
+
+int scsi_std_inquiry(struct sysfs_device *dev_scsi, const char *devname,
+                    char *vendor, char *model, char *rev, char *type)
+{
+       int retval;
+       int fd;
+       unsigned char buf[SCSI_INQ_BUFF_LEN];
+
+       dbg("opening %s\n", devname);
+       fd = open(devname, O_RDONLY | O_NONBLOCK);
+       if (fd < 0) {
+               info("%s: cannot open %s: %s",
+                   dev_scsi->kernel, devname, strerror(errno));
+               return 1;
+       }
+
+       memset(buf, 0, SCSI_INQ_BUFF_LEN);
+       retval = scsi_inquiry(dev_scsi, fd, 0, 0, buf, SCSI_INQ_BUFF_LEN);
+       if (retval < 0)
+               return retval;
+
+       memcpy(vendor, buf + 8, 8);
+       memcpy(model, buf + 16, 16);
+       memcpy(rev, buf + 32, 4);
+       sprintf(type,"%x", buf[0] & 0x1f);
+
+       if (close(fd) < 0)
+               info("%s: close failed: %s", dev_scsi->kernel, strerror(errno));
+
        return 0;
 }