X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Fudevadm-info.c;h=dbcaaffcdb473b99c835ba37dee21a5f7d0cd8c6;hp=4a9ebcd014b1d7770272ec53a7983d23d1da5d67;hb=fb762bb928772f1923fef1e342d8ebca9bf7691f;hpb=93b0f384589fce818edb9678571a30e71930d14c;ds=inline
diff --git a/udev/udevadm-info.c b/udev/udevadm-info.c
index 4a9ebcd01..dbcaaffcd 100644
--- a/udev/udevadm-info.c
+++ b/udev/udevadm-info.c
@@ -15,8 +15,6 @@
* along with this program. If not, see .
*/
-#include "config.h"
-
#include
#include
#include
@@ -150,7 +148,7 @@ static void print_record(struct udev_device *device)
printf("P: %s\n", udev_device_get_devpath(device));
len = strlen(udev_get_dev_path(udev_device_get_udev(device)));
- printf("N: %s\n", &udev_device_get_devname(device)[len+1]);
+ printf("N: %s\n", &udev_device_get_devnode(device)[len+1]);
i = device_get_devlink_priority(device);
if (i != 0)
printf("L: %i\n", i);
@@ -165,29 +163,19 @@ static void print_record(struct udev_device *device)
printf("\n");
}
-static int export_all_cb(struct udev *udev,
- const char *devpath, const char *subsystem, const char *name,
- void *data)
+static int export_all_cb(struct udev_device *device, void *data)
{
- struct udev_device *device;
-
- device = udev_device_new_from_devpath(udev, devpath);
- if (device == NULL)
- return 0;
- if (udev_device_get_devname(device) != NULL)
+ if (udev_device_get_devnode(device) != NULL)
print_record(device);
- udev_device_unref(device);
return 0;
}
static struct udev_device *lookup_device_by_name(struct udev *udev, const char *name)
{
-#if 0
- /* FIXME */
+ struct udev_device *udev_device = NULL;
LIST_HEAD(name_list);
int count;
struct name_entry *device;
- int rc = -1;
count = udev_db_get_devices_by_name(udev, name, &name_list);
if (count <= 0)
@@ -195,7 +183,7 @@ static struct udev_device *lookup_device_by_name(struct udev *udev, const char *
info(udev, "found %i devices for '%s'\n", count, name);
- /* select the device that seems to match */
+ /* select the device that matches */
list_for_each_entry(device, &name_list, node) {
struct udevice *udevice_loop;
char filename[UTIL_PATH_SIZE];
@@ -207,7 +195,6 @@ static struct udev_device *lookup_device_by_name(struct udev *udev, const char *
if (udev_db_get_device(udevice_loop, device->name) != 0)
goto next;
info(udev, "found db entry '%s'\n", device->name);
-
/* make sure, we don't get a link of a different device */
util_strlcpy(filename, udev_get_dev_path(udev), sizeof(filename));
util_strlcat(filename, "/", sizeof(filename));
@@ -218,17 +205,17 @@ static struct udev_device *lookup_device_by_name(struct udev *udev, const char *
info(udev, "skip '%s', dev_t doesn't match\n", udevice_loop->name);
goto next;
}
- rc = 0;
- *udevice = udevice_loop;
+ util_strlcpy(filename, udev_get_sys_path(udev), sizeof(filename));
+ util_strlcat(filename, udevice_loop->dev->devpath, sizeof(filename));
+ udev_device = udev_device_new_from_syspath(udev, filename);
+ udev_device_cleanup(udevice_loop);
break;
next:
udev_device_cleanup(udevice_loop);
}
out:
name_list_cleanup(udev, &name_list);
- return rc;
-#endif
- return NULL;
+ return udev_device;
}
static int add_devlink_cb(struct udev_device *device, const char *value, void *data)
@@ -353,13 +340,15 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
rc = 2;
goto exit;
}
- /* remove /sys if given */
- if (strncmp(optarg, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) == 0)
- util_strlcpy(path, &optarg[strlen(udev_get_sys_path(udev))], sizeof(path));
- else
+ /* add /sys if needed */
+ if (strncmp(optarg, udev_get_sys_path(udev), strlen(udev_get_sys_path(udev))) != 0) {
+ util_strlcpy(path, udev_get_sys_path(udev), sizeof(path));
+ util_strlcat(path, optarg, sizeof(path));
+ } else {
util_strlcpy(path, optarg, sizeof(path));
+ }
util_remove_trailing_chars(path, '/');
- device = udev_device_new_from_devpath(udev, path);
+ device = udev_device_new_from_syspath(udev, path);
break;
case 'q':
action = ACTION_QUERY;
@@ -439,7 +428,7 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
switch (action) {
case ACTION_QUERY:
if (device == NULL) {
- fprintf(stderr, "query needs --path= or node --name= specified\n");
+ fprintf(stderr, "query needs a valid device specified by --path= or --name=\n");
rc = 4;
goto exit;
}
@@ -447,12 +436,12 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
switch(query) {
case QUERY_NAME:
if (root) {
- printf("%s\n", udev_device_get_devname(device));
+ printf("%s\n", udev_device_get_devnode(device));
} else {
size_t len;
len = strlen(udev_get_dev_path(udev));
- printf("%s\n", &udev_device_get_devname(device)[len+1]);
+ printf("%s\n", &udev_device_get_devnode(device)[len+1]);
}
break;
case QUERY_SYMLINK:
@@ -480,7 +469,7 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
break;
case ACTION_ATTRIBUTE_WALK:
if (device == NULL) {
- fprintf(stderr, "attribute walk needs --path or node --name specified\n");
+ fprintf(stderr, "query needs a valid device specified by --path= or --name=\n");
rc = 5;
goto exit;
}