From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Sun, 29 Feb 2004 20:22:22 +0000 Subject: Re: udevinfo reverse lookup for symlinks Message-Id: <20040229202222.GA3592@vrfy.org> MIME-Version: 1 Content-Type: multipart/mixed; boundary="82I3+IH0IqGh5yIs" List-Id: References: <20040209163332.GA2836@suse.de> In-Reply-To: <20040209163332.GA2836@suse.de> To: linux-hotplug@vger.kernel.org --82I3+IH0IqGh5yIs Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, Feb 29, 2004 at 08:42:47PM +0100, Olaf Hering wrote: > On Mon, Feb 09, Kay Sievers wrote: > > > On Mon, Feb 09, 2004 at 05:33:32PM +0100, Olaf Hering wrote: > > > > > > How do I reverse lookup symlinks? > > > It seem that is not implemented. > > > > > > nectarine:~ # udevinfo -n cdrom -q path > > > device not found in database > > > > It's not implemented. I didn't see the need for this, > > cause it's easy to follow the link to the real node > > and query this instead. But feel free to send a patch :) Nice, looks good. Thanks. > memcpy(find_dev, dev, sizeof(*find_dev)); > - strfieldcpy(find_path, path); > + strncpy(find_path, path, NAME_SIZE); > find_found = 1; strncpy() does not terminate the string! I changed it to strnfieldcpy(), you are right the strfieldcpy() can't work. I've added a 'all' query option to print all attributes and changed the man page to reflect the new capability. Please have a look. thanks again, Kay --82I3+IH0IqGh5yIs Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="06-reverse-symlink.patch" ===== udevdb.c 1.23 vs edited ===== --- 1.23/udevdb.c Wed Feb 25 01:04:14 2004 +++ edited/udevdb.c Sun Feb 29 21:02:04 2004 @@ -27,6 +27,7 @@ #define _KLIBC_HAS_ARCH_SIG_ATOMIC_T #include #include +#include #include #include #include @@ -178,13 +179,29 @@ 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); + 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 -i) == 0) { + memcpy(find_dev, dev, sizeof(*find_dev)); + strncpy(find_path, path, NAME_SIZE); + find_found = 1; + return 1; + } + i = i + j + 1; + } while (i < l); return 0; } ===== udevinfo.8 1.5 vs edited ===== --- 1.5/udevinfo.8 Tue Feb 17 04:09:57 2004 +++ edited/udevinfo.8 Sun Feb 29 21:13:17 2004 @@ -28,13 +28,13 @@ .RB Needs " -p " or " -n " specified. .br Valid types are: -.BR name ", " symlink ", " mode " ," owner " , " group " or " path. +.BR name ", " symlink ", " mode " ," owner " , " group " , " path " or " all. .TP .BI -p " sysfs_path" Specify the sysfs path of the device to query. .TP .BI -n " name" -Specify the name of the node for the device to query. +Specify the name of the node or the symlink for the device to query. .TP .B -a Print all ===== udevinfo.c 1.14 vs edited ===== --- 1.14/udevinfo.c Wed Feb 25 01:04:14 2004 +++ edited/udevinfo.c Sun Feb 29 21:10:19 2004 @@ -122,7 +122,8 @@ SYMLINK, MODE, OWNER, - GROUP + GROUP, + ALL }; static int print_device_chain(const char *path) @@ -258,6 +259,11 @@ break; } + if (strcmp(optarg, "all") == 0) { + query = ALL; + break; + } + printf("unknown query type\n"); exit(1); @@ -366,6 +372,10 @@ strfieldcpy(result, path); break; + case ALL: + print_record(path, &dev); + goto exit; + default: goto exit; } @@ -406,8 +416,10 @@ " 'owner' of node\n" " 'group' of node\n" " 'path' sysfs device path\n" + " 'all' all values\n" + "\n" " -p PATH sysfs device path used for query or chain\n" - " -n NAME node name used for query\n" + " -n NAME node/symlink name used for query\n" "\n" " -r print udev root\n" " -a print all SYSFS_attributes along the device chain\n" --82I3+IH0IqGh5yIs-- ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel