chiark / gitweb /
udev-builtin-usb_id: avoid comparison of unsigned and ssize_t
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 5 Apr 2013 21:40:31 +0000 (17:40 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 5 Apr 2013 21:39:02 +0000 (17:39 -0400)
For some reason this shows up on i686 only:
src/udev/udev-builtin-usb_id.c:192:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

src/udev/udev-builtin-usb_id.c

index dcb2468..269aa4e 100644 (file)
@@ -151,11 +151,12 @@ static void set_scsi_type(char *to, const char *from, size_t len)
 
 static int dev_if_packed_info(struct udev_device *dev, char *ifs_str, size_t len)
 {
-        char *filename = NULL;
-        int fd;
+        char _cleanup_free_ *filename = NULL;
+        int _cleanup_close_ fd = -1;
         ssize_t size;
         unsigned char buf[18 + 65535];
-        unsigned int pos, strpos;
+        int pos = 0;
+        unsigned strpos = 0;
         struct usb_interface_descriptor {
                 u_int8_t        bLength;
                 u_int8_t        bDescriptorType;
@@ -167,27 +168,20 @@ static int dev_if_packed_info(struct udev_device *dev, char *ifs_str, size_t len
                 u_int8_t        bInterfaceProtocol;
                 u_int8_t        iInterface;
         } __attribute__((packed));
-        int err = 0;
 
-        if (asprintf(&filename, "%s/descriptors", udev_device_get_syspath(dev)) < 0) {
-                err = -1;
-                goto out;
-        }
+        if (asprintf(&filename, "%s/descriptors", udev_device_get_syspath(dev)) < 0)
+                return log_oom();
+
         fd = open(filename, O_RDONLY|O_CLOEXEC);
         if (fd < 0) {
                 fprintf(stderr, "error opening USB device 'descriptors' file\n");
-                err = -1;
-                goto out;
+                return -errno;
         }
+
         size = read(fd, buf, sizeof(buf));
-        close(fd);
-        if (size < 18 || size == sizeof(buf)) {
-                err = -1;
-                goto out;
-        }
+        if (size < 18 || size == sizeof(buf))
+                return -EIO;
 
-        pos = 0;
-        strpos = 0;
         ifs_str[0] = '\0';
         while (pos < size && strpos+7 < len-2) {
                 struct usb_interface_descriptor *desc;
@@ -213,13 +207,13 @@ static int dev_if_packed_info(struct udev_device *dev, char *ifs_str, size_t len
                 memcpy(&ifs_str[strpos], if_str, 8),
                 strpos += 7;
         }
+
         if (strpos > 0) {
                 ifs_str[strpos++] = ':';
                 ifs_str[strpos++] = '\0';
         }
-out:
-        free(filename);
-        return err;
+
+        return 0;
 }
 
 /*