[PATCH] make udevtest a real program :)

Here are the missing pieces for udevtest. A simple man page is added,
the blacklist is removed, cause it can't work without having a subsystem.
The Makefile removes all manpages now with a uninstall and installs
udevtest in /usr/bin/.
Any old version from /sbin/ should be deleted by hand.

The only expected argument is the sysfs devpath, here I changed it to be
more tolerant to the input. The path may now be specified with or
without a leading slash and optionally with the /sys moutpoint prepended.

I hope this will end the confusion about the use of this program :)
This commit is contained in:
kay.sievers@vrfy.org 2004-03-22 22:18:34 -08:00 committed by Greg KH
parent b99c85e440
commit 8a0acf85f2
3 changed files with 59 additions and 54 deletions

View File

@ -382,10 +382,11 @@ install: install-initscript install-config install-dbus-policy all
$(INSTALL_PROGRAM) -D $(DAEMON) $(DESTDIR)$(sbindir)/$(DAEMON)
$(INSTALL_PROGRAM) -D $(SENDER) $(DESTDIR)$(sbindir)/$(SENDER)
$(INSTALL_PROGRAM) -D $(INFO) $(DESTDIR)$(usrbindir)/$(INFO)
$(INSTALL_PROGRAM) -D $(TESTER) $(DESTDIR)$(sbindir)/$(TESTER)
$(INSTALL_PROGRAM) -D $(TESTER) $(DESTDIR)$(usrbindir)/$(TESTER)
$(INSTALL_PROGRAM) -D $(STARTER) $(DESTDIR)$(sbindir)/$(STARTER)
$(INSTALL_DATA) -D udev.8 $(DESTDIR)$(mandir)/man8/udev.8
$(INSTALL_DATA) -D udevinfo.8 $(DESTDIR)$(mandir)/man8/udevinfo.8
$(INSTALL_DATA) -D udevtest.8 $(DESTDIR)$(mandir)/man8/udevtest.8
$(INSTALL_DATA) -D udevstart.8 $(DESTDIR)$(mandir)/man8/udevstart.8
$(INSTALL_DATA) -D udevd.8 $(DESTDIR)$(mandir)/man8/udevd.8
- ln -f -s udevd.8 $(DESTDIR)$(mandir)/man8/udevsend.8
@ -408,6 +409,10 @@ uninstall: uninstall-dbus-policy
- rm $(initdir)/udev
- rm $(mandir)/man8/udev.8
- rm $(mandir)/man8/udevinfo.8
- rm $(mandir)/man8/udevtest.8
- rm $(mandir)/man8/udevstart.8
- rm $(mandir)/man8/udevd.8
- rm $(mandir)/man8/udevsend.8
- rm $(sbindir)/$(ROOT)
- rm $(sbindir)/$(DAEMON)
- rm $(sbindir)/$(SENDER)

17
udevtest.8 Normal file
View File

@ -0,0 +1,17 @@
.TH UDEVTEST 8 "March 2004" "" "Linux Administrator's Manual"
.SH NAME
udevtest \- simulates a udev run to test the configured rules
.SH SYNOPSIS
.BI udevtest " sysfs_device_path"
.SH "DESCRIPTION"
.B udevtest
simulates a
.B udev
run for the given device, and prints out the node names
for the given device, the real udev would have created.
.SH "SEE ALSO"
.BR udev (8)
.SH AUTHORS
.B udevtest
was developed by Greg Kroah-Hartman <greg@kroah.com> with much help
from others.

View File

@ -37,6 +37,7 @@
char **main_argv;
char **main_envp;
#ifdef LOG
unsigned char logname[LOGNAME_SIZE];
void log_message (int level, const char *format, ...)
@ -51,72 +52,54 @@ void log_message (int level, const char *format, ...)
}
#endif
static char *subsystem_blacklist[] = {
"net",
"scsi_host",
"scsi_device",
"usb_host",
"pci_bus",
"pcmcia_socket",
""
};
static int udev_hotplug(void)
int main(int argc, char *argv[], char *envp[])
{
char *devpath;
char *subsystem;
int retval = -EINVAL;
int i;
char temp[NAME_SIZE];
char subsystem[] = "";
const int fake = 1;
devpath = main_argv[1];
if (!devpath) {
dbg("no devpath?");
main_argv = argv;
main_envp = envp;
info("version %s", UDEV_VERSION);
if (argv[1] == NULL) {
info("udevinfo expects the DEVPATH of the sysfs device as a argument");
goto exit;
}
dbg("looking at '%s'", devpath);
/* we only care about class devices and block stuff */
if (!strstr(devpath, "class") &&
!strstr(devpath, "block")) {
dbg("not a block or class device");
goto exit;
}
/* skip blacklisted subsystems */
subsystem = main_argv[1];
i = 0;
while (subsystem_blacklist[i][0] != '\0') {
if (strcmp(subsystem, subsystem_blacklist[i]) == 0) {
dbg("don't care about '%s' devices", subsystem);
goto exit;
}
i++;
}
/* initialize our configuration */
udev_init_config();
/* remove sysfs_path if given */
if (strncmp(argv[1], sysfs_path, strlen(sysfs_path)) == 0)
devpath = argv[1] + strlen(sysfs_path);
else
if (argv[1][0] != '/') {
/* prepend '/' if missing */
strfieldcpy(temp, "/");
strfieldcat(temp, argv[1]);
devpath = temp;
} else {
devpath = argv[1];
}
info("looking at '%s'", devpath);
/* we only care about class devices and block stuff */
if (!strstr(devpath, "class") &&
!strstr(devpath, "block")) {
info("not a block or class device");
goto exit;
}
/* initialize the naming deamon */
namedev_init();
/* simulate node creation with fake flag */
retval = udev_add_device(devpath, subsystem, 1);
udev_add_device(devpath, subsystem, fake);
exit:
if (retval > 0)
retval = 0;
return -retval;
return 0;
}
int main(int argc, char *argv[], char *envp[])
{
main_argv = argv;
main_envp = envp;
dbg("version %s", UDEV_VERSION);
return udev_hotplug();
}