X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fscsi_id%2Fscsi_serial.c;h=7b308a935c44e07b97fb4b38bdcfedcb6027e543;hb=ca508dd94dc785492b5c62f56b02c0eeb3775f38;hp=cbacf379fee8cff055b9d44d01792837eb222159;hpb=caf4c97a2c443eeb8eebe7d42806eaca500db223;p=elogind.git diff --git a/extras/scsi_id/scsi_serial.c b/extras/scsi_id/scsi_serial.c index cbacf379f..7b308a935 100644 --- a/extras/scsi_id/scsi_serial.c +++ b/extras/scsi_id/scsi_serial.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -30,7 +31,8 @@ /* #include */ #include "bsg.h" -#include "../../udev/udev.h" +#include "libudev.h" +#include "libudev-private.h" #include "scsi.h" #include "scsi_id.h" @@ -168,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]; @@ -208,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) { /* @@ -221,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]; @@ -456,11 +455,8 @@ static int prepend_vendor_model(struct udev *udev, int ind; strncpy(serial, dev_scsi->vendor, VENDOR_LENGTH); - ind = strlen(serial) - 1; - strncat(serial, dev_scsi->model, MODEL_LENGTH); - ind = strlen(serial) - 1; - ind++; + ind = strlen(serial); /* * This is not a complete check, since we are using strncat/cpy @@ -469,7 +465,7 @@ static int prepend_vendor_model(struct udev *udev, if (ind != (VENDOR_LENGTH + MODEL_LENGTH)) { info(udev, "%s: expected length %d, got length %d\n", dev_scsi->kernel, (VENDOR_LENGTH + MODEL_LENGTH), ind); - return 1; + return -1; } return ind; } @@ -614,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 ". */ @@ -772,7 +768,7 @@ static int do_scsi_page80_inquiry(struct udev *udev, len = 1 + VENDOR_LENGTH + MODEL_LENGTH + buf[3]; if (max_len < len) { info(udev, "%s: length %d too short - need %d\n", - dev_scsi->kernel, max_len, len); + dev_scsi->kernel, max_len, len); return 1; } /* @@ -848,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;