chiark / gitweb /
fix randonm findings from llvm-clang-analyzer
[elogind.git] / extras / scsi_id / scsi_serial.c
index 4248829180b36475f519f775d3377a19a16d2033..7b308a935c44e07b97fb4b38bdcfedcb6027e543 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <syslog.h>
+#include <time.h>
 #include <inttypes.h>
 #include <scsi/scsi.h>
 #include <scsi/sg.h>
@@ -169,7 +170,6 @@ static int scsi_dump_sense(struct udev *udev,
        int code;
        int sense_class;
        int sense_key;
-       int descriptor_format;
        int asc, ascq;
 #ifdef DUMP_SENSE
        char out_buffer[256];
@@ -209,7 +209,6 @@ static int scsi_dump_sense(struct udev *udev,
                        return -1;
                }
                if ((code == 0x0) || (code == 0x1)) {
-                       descriptor_format = 0;
                        sense_key = sense_buffer[2] & 0xf;
                        if (s < 14) {
                                /*
@@ -222,7 +221,6 @@ static int scsi_dump_sense(struct udev *udev,
                        asc = sense_buffer[12];
                        ascq = sense_buffer[13];
                } else if ((code == 0x2) || (code == 0x3)) {
-                       descriptor_format = 1;
                        sense_key = sense_buffer[1] & 0xf;
                        asc = sense_buffer[2];
                        ascq = sense_buffer[3];
@@ -612,7 +610,7 @@ static int do_scsi_page83_inquiry(struct udev *udev,
        
        /*
         * XXX Some devices (IBM 3542) return all spaces for an identifier if
-        * the LUN is not actually configured. This leads to identifers of
+        * the LUN is not actually configured. This leads to identifiers of
         * the form: "1            ".
         */
 
@@ -846,13 +844,15 @@ int scsi_get_serial(struct udev *udev,
        memset(dev_scsi->serial, 0, len);
        dbg(udev, "opening %s\n", devname);
        while (--cnt) {
+               const struct timespec duration = { 0, 500 * 1000 * 1000 };
+
                fd = open(devname, O_RDONLY | O_NONBLOCK);
                if (fd >= 0)
                        break;
                info(udev, "%s: cannot open %s: %s\n", dev_scsi->kernel, devname, strerror(errno));
                if (errno != EBUSY)
                        break;
-               usleep(500000 + (rand() % 100000) );
+               nanosleep(&duration, NULL);
        }
        if (fd < 0)
                return 1;