Skip to contentSkip to conversation

udevinfo symlink reverse query

PATCH Applied Kay Sievers 2 participants 2 messages Mar 1, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 udevinfo symlink reverse query

Thanks to Olaf Hering <[email protected]> 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 :)

thanks,
Kay

===== udevdb.c 1.23 vs edited =====

udevdb.c +19 -2
@@ -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_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;
 }
 

===== udevinfo.8 1.5 vs edited =====

udevinfo.8 +2 -2
@@ -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 =====

udevinfo.c +14 -2
@@ -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"
Applied
#1 lore raw
Quoted 5 lines · Kay Sievers

Thanks to Olaf Hering <[email protected]> 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 :)

Applied, thanks.

greg k-h

-------------------------------------------------------
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_id56&alloc_id438&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel