linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [udev] make udev user callable to query the database (experimental)
@ 2003-12-30  4:28 Kay Sievers
  2003-12-30 13:13 ` Kay Sievers
  2003-12-30 22:33 ` Greg KH
  0 siblings, 2 replies; 3+ messages in thread
From: Kay Sievers @ 2003-12-30  4:28 UTC (permalink / raw)
  To: linux-hotplug

[-- Attachment #1: Type: text/plain, Size: 467 bytes --]

Here is a patch that makes it possible to call udev with options on the command line.
Valid options are for now:

-V for the udev version:
    kay@pim:~/src/udev.kay$ ./udev -V
    udev, version 011_bk

-r for the udev root:
    kay@pim:~/src/udev.kay$ ./udev -r
    /udev/

-q to query the database with the sysfs path for the name of the node:
    kay@pim:~/src/udev.kay$ ./udev -q /class/video4linux/video0
    test/video/webcam0


What do you think?

thanks,
Kay

[-- Attachment #2: 02-make-udev-user-callable.diff --]
[-- Type: text/plain, Size: 3081 bytes --]

diff -Nru a/udev.c b/udev.c
--- a/udev.c	Tue Dec 30 05:11:30 2003
+++ b/udev.c	Tue Dec 30 05:11:30 2003
@@ -29,6 +29,7 @@
 #include <errno.h>
 #include <ctype.h>
 #include <signal.h>
+#include <stdarg.h>
 
 #include "udev.h"
 #include "udev_version.h"
@@ -81,22 +82,58 @@
 	return seqnum;
 }
 
-int main(int argc, char **argv, char **envp)
+static inline int udev_user(int argc, char **argv)
 {
-	char *action;
-	char *devpath;
-	char *subsystem;
+	static const char short_options[] = "q:rV";
+	int option;
 	int retval = -EINVAL;
+	struct udevice dev;
 
-	main_argv = argv;
-	main_envp = envp;
+	while (1) {
+		option = getopt(argc, argv, short_options);
+		if (option == -1)
+			break;
 
-	dbg("version %s", UDEV_VERSION);
+		dbg("option '%c'", option);
+		switch (option) {
+		case 'q':
+			dbg("udev query: %s\n", optarg);
+			retval = udevdb_open_ro();
+			if (retval != 0) {
+				printf("unable to open udev database\n");
+				return -1;
+			}
+			retval = udevdb_get_dev(optarg, &dev);
+			if (retval == 0) {
+				printf("%s\n", dev.name);
+			} else {
+				printf("device not found in udev database\n");
+			}
+			udevdb_exit();
+			return retval;
 
-	if (argc != 2) {
-		dbg ("unknown number of arguments");
-		goto exit;
+		case 'r':
+			printf("%s\n", udev_root);
+			return 0;
+
+		case 'V':
+			printf("udev, version %s\n", UDEV_VERSION);
+			return 0;
+
+		default:
+			printf("unknown option '%c'\n", option);
+			return -1;
+		}
 	}
+	return retval;
+}
+
+static inline int udev_hotplug(int argc, char **argv)
+{
+	char *action;
+	char *devpath;
+	char *subsystem;
+	int retval = -EINVAL;
 
 	subsystem = argv[1];
 
@@ -126,9 +163,6 @@
 		goto exit;
 	}
 
-	/* initialize our configuration */
-	udev_init_config();
-
 	/* connect to the system message bus */
 	sysbus_connect();
 
@@ -166,3 +200,27 @@
 exit:
 	return retval;
 }
+
+int main(int argc, char **argv, char **envp)
+{
+	main_argv = argv;
+	main_envp = envp;
+	int retval;
+
+	dbg("version %s", UDEV_VERSION);
+
+	/* initialize our configuration */
+	udev_init_config();
+
+	if (argc == 2 && argv[1][0] != '-') {
+		dbg("called by hotplug");
+		retval = udev_hotplug(argc, argv);
+	} else {
+		dbg("called by user");
+		retval = udev_user(argc, argv);
+	}
+
+	return retval;
+}
+
+
diff -Nru a/udevdb.c b/udevdb.c
--- a/udevdb.c	Tue Dec 30 05:11:30 2003
+++ b/udevdb.c	Tue Dec 30 05:11:30 2003
@@ -128,3 +128,16 @@
 	}
 	return 0;
 }
+
+/**
+ * udevdb_init: open database for reading
+ */
+int udevdb_open_ro(void)
+{
+	udevdb = tdb_open(udev_db_filename, 0, 0, O_RDONLY, 0);
+	if (udevdb == NULL) {
+		dbg("unable to open database at '%s'", udev_db_filename);
+		return -EINVAL;
+	}
+	return 0;
+}
diff -Nru a/udevdb.h b/udevdb.h
--- a/udevdb.h	Tue Dec 30 05:11:30 2003
+++ b/udevdb.h	Tue Dec 30 05:11:30 2003
@@ -11,6 +11,7 @@
 /* function prototypes */
 extern void udevdb_exit(void);
 extern int udevdb_init(int init_flag);
+extern int udevdb_open_ro(void);
 
 extern int udevdb_add_dev(const char *path, const struct udevice *dev);
 extern int udevdb_get_dev(const char *path, struct udevice *dev);

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-12-30 22:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-12-30  4:28 [udev] make udev user callable to query the database (experimental) Kay Sievers
2003-12-30 13:13 ` Kay Sievers
2003-12-30 22:33 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).