chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
driverd: implement AddMatch/RemoveMatch logic
[elogind.git]
/
src
/
udev
/
udev-builtin-usb_id.c
diff --git
a/src/udev/udev-builtin-usb_id.c
b/src/udev/udev-builtin-usb_id.c
index ee83d4fde9ac44cf8772ade6e875e993f82ac61f..3e2f43e1a6dd0144537f95c11fa3a46ec2ad6954 100644
(file)
--- a/
src/udev/udev-builtin-usb_id.c
+++ b/
src/udev/udev-builtin-usb_id.c
@@
-91,6
+91,9
@@
static int set_usb_mass_storage_ifsubtype(char *to, const char *from, size_t len
type_num = strtoul(from, &eptr, 0);
if (eptr != from) {
switch (type_num) {
type_num = strtoul(from, &eptr, 0);
if (eptr != from) {
switch (type_num) {
+ case 1: /* RBC devices */
+ type = "rbc";
+ break;
case 2:
type = "atapi";
break;
case 2:
type = "atapi";
break;
@@
-98,12
+101,8
@@
static int set_usb_mass_storage_ifsubtype(char *to, const char *from, size_t len
type = "tape";
break;
case 4: /* UFI */
type = "tape";
break;
case 4: /* UFI */
- case 5: /* SFF-8070i */
type = "floppy";
break;
type = "floppy";
break;
- case 1: /* RBC devices */
- type = "rbc";
- break;
case 6: /* Transparent SPC-2 devices */
type = "scsi";
break;
case 6: /* Transparent SPC-2 devices */
type = "scsi";
break;
@@
-151,11
+150,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)
{
static int dev_if_packed_info(struct udev_device *dev, char *ifs_str, size_t len)
{
- char *filename = NULL;
-
int fd
;
+
_cleanup_free_
char *filename = NULL;
+
_cleanup_close_ int fd = -1
;
ssize_t size;
unsigned char buf[18 + 65535];
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;
struct usb_interface_descriptor {
u_int8_t bLength;
u_int8_t bDescriptorType;
@@
-167,29
+167,22
@@
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));
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");
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));
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';
ifs_str[0] = '\0';
- while (pos < size
of(buf)
&& strpos+7 < len-2) {
+ while (pos < size && strpos+7 < len-2) {
struct usb_interface_descriptor *desc;
char if_str[8];
struct usb_interface_descriptor *desc;
char if_str[8];
@@
-213,13
+206,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;
}
memcpy(&ifs_str[strpos], if_str, 8),
strpos += 7;
}
+
if (strpos > 0) {
ifs_str[strpos++] = ':';
ifs_str[strpos++] = '\0';
}
if (strpos > 0) {
ifs_str[strpos++] = ':';
ifs_str[strpos++] = '\0';
}
-out:
- free(filename);
- return err;
+
+ return 0;
}
/*
}
/*