diff options
| author | Kay Sievers <kay.sievers@vrfy.org> | 2008-10-01 10:22:47 +0200 | 
|---|---|---|
| committer | Kay Sievers <kay.sievers@vrfy.org> | 2008-10-01 10:22:47 +0200 | 
| commit | 62b9dfb62255c5b07f1356eee423aff18d6addaa (patch) | |
| tree | c357a509ea6909d6dfdf62338539506660b4b68b /udev/lib | |
| parent | 8249e04e3e9b6054768c3cd0ef72544831672b47 (diff) | |
libudev: device - handle /sys/block/<disk-device-link>/<partition>
Diffstat (limited to 'udev/lib')
| -rw-r--r-- | udev/lib/libudev-device.c | 19 | 
1 files changed, 18 insertions, 1 deletions
| diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index 893ec080a6..a512537140 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -231,8 +231,8 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *  {  	size_t len;  	const char *subdir; -	const char *pos;  	char path[UTIL_PATH_SIZE]; +	char *pos;  	struct stat statbuf;  	struct udev_device *udev_device; @@ -260,6 +260,23 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *  	util_strlcpy(path, syspath, sizeof(path));  	util_resolve_sys_link(udev, path, sizeof(path)); +	/* try to resolve the silly block layout if needed */ +	if (strncmp(&path[len], "/block/", 7) == 0) { +		char block[UTIL_PATH_SIZE]; +		char part[UTIL_PATH_SIZE]; + +		util_strlcpy(block, path, sizeof(block)); +		pos = strrchr(block, '/'); +		if (pos == NULL) +			return NULL; +		util_strlcpy(part, pos, sizeof(part)); +		pos[0] = '\0'; +		if (util_resolve_sys_link(udev, block, sizeof(block)) == 0) { +			util_strlcpy(path, block, sizeof(path)); +			util_strlcat(path, part, sizeof(path)); +		} +	} +  	/* path exists in sys */  	if (strncmp(&syspath[len], "/devices/", 9) == 0 ||  	    strncmp(&syspath[len], "/class/", 7) == 0 || | 
