chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libudev: get devnum from uevent file
[elogind.git]
/
udev
/
lib
/
libudev-device.c
diff --git
a/udev/lib/libudev-device.c
b/udev/lib/libudev-device.c
index a772dbbcf8841456d477ae1e6e632d5dd587fabb..359ae443dab2ec6059c66110a22e63b69dd7f60c 100644
(file)
--- a/
udev/lib/libudev-device.c
+++ b/
udev/lib/libudev-device.c
@@
-70,6
+70,8
@@
static int device_read_uevent_file(struct udev_device *udev_device)
char filename[UTIL_PATH_SIZE];
FILE *f;
char line[UTIL_LINE_SIZE];
char filename[UTIL_PATH_SIZE];
FILE *f;
char line[UTIL_LINE_SIZE];
+ int maj = 0;
+ int min = 0;
util_strlcpy(filename, udev_device->syspath, sizeof(filename));
util_strlcat(filename, "/uevent", sizeof(filename));
util_strlcpy(filename, udev_device->syspath, sizeof(filename));
util_strlcat(filename, "/uevent", sizeof(filename));
@@
-84,9
+86,17
@@
static int device_read_uevent_file(struct udev_device *udev_device)
if (pos == NULL)
continue;
pos[0] = '\0';
if (pos == NULL)
continue;
pos[0] = '\0';
+
+ if (strncmp(line, "MAJOR=", 6) == 0)
+ maj = strtoull(&line[6], NULL, 10);
+ else if (strncmp(line, "MINOR=", 6) == 0)
+ min = strtoull(&line[6], NULL, 10);
+
device_add_property_from_string(udev_device, line);
}
device_add_property_from_string(udev_device, line);
}
+ udev_device->devnum = makedev(maj, min);
+
fclose(f);
return 0;
}
fclose(f);
return 0;
}
@@
-97,7
+107,6
@@
static int device_read_db(struct udev_device *udev_device)
char filename[UTIL_PATH_SIZE];
char line[UTIL_LINE_SIZE];
FILE *f;
char filename[UTIL_PATH_SIZE];
char line[UTIL_LINE_SIZE];
FILE *f;
- int rc = 0;
syspath_to_db_path(udev_device, filename, sizeof(filename));
syspath_to_db_path(udev_device, filename, sizeof(filename));
@@
-131,7
+140,6
@@
static int device_read_db(struct udev_device *udev_device)
while (fgets(line, sizeof(line), f)) {
ssize_t len;
const char *val;
while (fgets(line, sizeof(line), f)) {
ssize_t len;
const char *val;
- unsigned int maj, min;
len = strlen(line);
if (len < 4)
len = strlen(line);
if (len < 4)
@@
-143,10
+151,6
@@
static int device_read_db(struct udev_device *udev_device)
case 'N':
asprintf(&udev_device->devname, "%s/%s", udev_get_dev_path(udev_device->udev), val);
break;
case 'N':
asprintf(&udev_device->devname, "%s/%s", udev_get_dev_path(udev_device->udev), val);
break;
- case 'M':
- sscanf(val, "%u:%u", &maj, &min);
- device_set_devnum(udev_device, makedev(maj, min));
- break;
case 'S':
util_strlcpy(filename, udev_get_dev_path(udev_device->udev), sizeof(filename));
util_strlcat(filename, "/", sizeof(filename));
case 'S':
util_strlcpy(filename, udev_get_dev_path(udev_device->udev), sizeof(filename));
util_strlcat(filename, "/", sizeof(filename));
@@
-157,7
+161,7
@@
static int device_read_db(struct udev_device *udev_device)
device_set_devlink_priority(udev_device, atoi(val));
break;
case 'T':
device_set_devlink_priority(udev_device, atoi(val));
break;
case 'T':
- device_set_timeout(udev_device,
atoi(val));
+ device_set_timeout(udev_device, atoi(val));
break;
case 'A':
device_set_num_fake_partitions(udev_device, atoi(val));
break;
case 'A':
device_set_num_fake_partitions(udev_device, atoi(val));
@@
-172,7
+176,8
@@
static int device_read_db(struct udev_device *udev_device)
}
fclose(f);
}
fclose(f);
- return rc;
+ info(udev_device->udev, "device %p filled with udev database data\n", udev_device);
+ return 0;
}
struct udev_device *device_init(struct udev *udev)
}
struct udev_device *device_init(struct udev *udev)
@@
-238,8
+243,7
@@
struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *
info(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device));
device_read_uevent_file(udev_device);
info(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device));
device_read_uevent_file(udev_device);
- if (device_read_db(udev_device) >= 0)
- info(udev, "device %p filled with udev database data\n", udev_device);
+ device_read_db(udev_device);
return udev_device;
}
return udev_device;
}
@@
-264,7
+268,7
@@
struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, de
if (util_resolve_sys_link(udev, path, sizeof(path)) == 0)
return udev_device_new_from_syspath(udev, path);
if (util_resolve_sys_link(udev, path, sizeof(path)) == 0)
return udev_device_new_from_syspath(udev, path);
- /* search all sys devices for the major/minor */
+ /*
fallback to
search all sys devices for the major/minor */
enumerate = udev_enumerate_new_from_subsystems(udev, NULL);
if (enumerate == NULL)
return NULL;
enumerate = udev_enumerate_new_from_subsystems(udev, NULL);
if (enumerate == NULL)
return NULL;