From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: Re: [udev] make udev user callable to query the database (experimental)
Date: Tue, 30 Dec 2003 13:13:26 +0000 [thread overview]
Message-ID: <20031230131326.GA23002@vrfy.org> (raw)
In-Reply-To: <marc-linux-hotplug-107275855521649@msgid-missing>
[-- Attachment #1: Type: text/plain, Size: 778 bytes --]
Here is a slightly better version that prints the usage if a unknown option is given:
kay@pim:~/src/udev.kay$ ./udev -x
./udev: invalid option -- x
Usage: [-qrVh]
-q arg query database
-r print udev root
-V print udev version
-h print this help text
thanks,
Kay
> 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
[-- Attachment #2: 02-make-udev-user-callable.diff --]
[-- Type: text/plain, Size: 3337 bytes --]
diff -Nru a/udev.c b/udev.c
--- a/udev.c Tue Dec 30 14:04:03 2003
+++ b/udev.c Tue Dec 30 14:04:03 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,23 +82,70 @@
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:rVh";
+ 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;
+
+ case 'h':
+ retval = 0;
+ case '?':
+ default:
+ goto help;
+ }
}
+help:
+ printf("Usage: [-qrVh]\n"
+ " -q arg query database \n"
+ " -r print udev root\n"
+ " -V print udev version\n"
+ " -h print this help text\n"
+ "\n");
+
+ return retval;
+}
+
+static inline int udev_hotplug(int argc, char **argv)
+{
+ char *action;
+ char *devpath;
+ char *subsystem;
+ int retval = -EINVAL;
+
subsystem = argv[1];
devpath = get_devpath();
@@ -126,9 +174,6 @@
goto exit;
}
- /* initialize our configuration */
- udev_init_config();
-
/* connect to the system message bus */
sysbus_connect();
@@ -166,3 +211,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 14:04:03 2003
+++ b/udevdb.c Tue Dec 30 14:04:03 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 14:04:03 2003
+++ b/udevdb.h Tue Dec 30 14:04:03 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);
next prev parent reply other threads:[~2003-12-30 13:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-30 4:28 [udev] make udev user callable to query the database (experimental) Kay Sievers
2003-12-30 13:13 ` Kay Sievers [this message]
2003-12-30 22:33 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20031230131326.GA23002@vrfy.org \
--to=kay.sievers@vrfy.org \
--cc=linux-hotplug@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).