mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
[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:
parent
b99c85e440
commit
8a0acf85f2
7
Makefile
7
Makefile
@ -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
17
udevtest.8
Normal 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.
|
89
udevtest.c
89
udevtest.c
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user