diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-03-01 23:47:59 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:35:06 -0700 |
commit | 8ea84a8a781c22f67def088eb9df581590393cda (patch) | |
tree | 7d7dcda87c878677e83c2f7532822ab831af1d5c /udevdb.c | |
parent | 97853b4f40708d2fdcde3da7e78138c683d9d66b (diff) | |
download | systemd-8ea84a8a781c22f67def088eb9df581590393cda.tar.gz |
[PATCH] udevinfo symlink reverse query
Thanks to Olaf Hering <olh@suse.de> for this patch. It's possible now to
feed the -n option of udevinfo with a symlink.
I've also added a 'all' attribute, but no more text, it's all in the
included man page :)
Diffstat (limited to 'udevdb.c')
-rw-r--r-- | udevdb.c | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -27,6 +27,7 @@ #define _KLIBC_HAS_ARCH_SIG_ATOMIC_T #include <stdlib.h> #include <stdio.h> +#include <string.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> @@ -178,13 +179,29 @@ static int find_found; static int find_device_by_name(char *path, struct udevice *dev) { + int l, i, j; if (strncmp(dev->name, find_name, sizeof(dev->name)) == 0) { - memcpy(find_dev, dev, sizeof(*find_dev)); - strfieldcpy(find_path, path); + memcpy(find_dev, dev, sizeof(struct udevice)); + strnfieldcpy(find_path, path, NAME_SIZE); find_found = 1; /* stop search */ return 1; } + /* look for matching symlink*/ + l = strlen(dev->symlink); + if (!l) + return 0; + i = j = 0; + do { + j = strcspn(&dev->symlink[i], " "); + if (j && strncmp(&dev->symlink[i], find_name, j) == 0) { + memcpy(find_dev, dev, sizeof(struct udevice)); + strnfieldcpy(find_path, path, NAME_SIZE); + find_found = 1; + return 1; + } + i = i + j + 1; + } while (i < l); return 0; } |