chiark / gitweb /
[PATCH] add udevtest program to build
authorgreg@kroah.com <greg@kroah.com>
Fri, 13 Feb 2004 04:19:21 +0000 (20:19 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:32:27 +0000 (21:32 -0700)
Also fix up some other dependancy issues in the Makefile.
Thanks to Olaf Hering <olh@suse.de> for pointing them out.

Makefile
udev-add.c
udev.c
udev.h
udevtest.c

index f53e7ca2fdc1f6b52681366670686c27c5cca80d..cb9dfdd3d8611e7aa054aa10ec30689217ae4b7b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -34,6 +34,7 @@ ROOT =                udev
 DAEMON =       udevd
 SENDER =       udevsend
 HELPER =       udevinfo
+TESTER =       udevtest
 VERSION =      016_bk
 INSTALL_DIR =  /usr/local/bin
 RELEASE_NAME = $(ROOT)-$(VERSION)
@@ -168,7 +169,7 @@ endif
 
 CFLAGS += -I$(PWD)/libsysfs
 
-all: $(ROOT) $(SENDER) $(DAEMON) $(HELPER)
+all: $(ROOT) $(SENDER) $(DAEMON) $(HELPER) $(TESTER)
        @extras="$(EXTRAS)" ; for target in $$extras ; do \
                echo $$target ; \
                $(MAKE) prefix=$(prefix) \
@@ -178,8 +179,6 @@ all: $(ROOT) $(SENDER) $(DAEMON) $(HELPER)
                        -C $$target $@ ; \
        done ; \
 
-$(ROOT): $(LIBC)
-
 $(ARCH_LIB_OBJS) : $(CRT0)
 
 $(CRT0):
@@ -250,21 +249,29 @@ $(LOCAL_CFG_DIR)/udev.conf:
 
 
 $(OBJS): $(GEN_HEADERS)
-udev.o: $(GEN_HEADERS)
+$(ROOT).o: $(GEN_HEADERS)
+$(TESTER).o: $(GEN_HEADERS)
+$(HELPER).o: $(GEN_HEADERS)
+$(DAEMON).o: $(GEN_HEADERS)
+$(SENDER).o: $(GEN_HEADERS)
 
-$(ROOT): udev.o $(OBJS) $(HEADERS) $(GEN_HEADERS)
+$(ROOT): $(ROOT).o $(OBJS) $(HEADERS) $(LIBC)
        $(LD) $(LDFLAGS) -o $@ $(CRT0) udev.o $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
        $(STRIPCMD) $@
 
-$(HELPER): $(HEADERS) udevinfo.o $(OBJS)
+$(TESTER): $(TESTER).o $(OBJS) $(HEADERS) $(LIBC)
+       $(LD) $(LDFLAGS) -o $@ $(CRT0) udevtest.o $(OBJS) $(LIB_OBJS) $(ARCH_LIB_OBJS)
+       $(STRIPCMD) $@
+
+$(HELPER): $(HELPER).o $(OBJS) $(HEADERS) $(LIBC)
        $(LD) $(LDFLAGS) -o $@ $(CRT0) udevinfo.o udev_config.o udevdb.o $(SYSFS) $(TDB) $(LIB_OBJS) $(ARCH_LIB_OBJS)
        $(STRIPCMD) $@
 
-$(DAEMON): udevd.h $(GEN_HEADERS) udevd.o
+$(DAEMON): $(DAEMON).o udevd.h $(LIBC)
        $(LD) $(LDFLAGS) -o $@ $(CRT0) udevd.o $(LIB_OBJS) $(ARCH_LIB_OBJS)
        $(STRIPCMD) $@
 
-$(SENDER): udevd.h $(GEN_HEADERS) udevsend.o
+$(SENDER): $(SENDER).o udevd.h $(LIBC)
        $(LD) $(LDFLAGS) -o $@ $(CRT0) udevsend.o $(LIB_OBJS) $(ARCH_LIB_OBJS)
        $(STRIPCMD) $@
 
index fedc8f0fc80666d10fe4d6f36a75ba9507f9eac6..8867c8f5afc2ee5d6e125df73ea6a2ce4fa1a08b 100644 (file)
@@ -99,7 +99,7 @@ static int create_path(char *file)
        return 0;
 }
 
-static int create_node(struct udevice *dev)
+static int create_node(struct udevice *dev, int fake)
 {
        struct stat stats;
        char filename[255];
@@ -137,16 +137,20 @@ static int create_node(struct udevice *dev)
 
        info("creating device node '%s'", filename);
        dbg("mknod(%s, %#o, %u, %u)", filename, dev->mode, dev->major, dev->minor);
-       retval = mknod(filename, dev->mode, makedev(dev->major, dev->minor));
-       if (retval != 0)
-               dbg("mknod(%s, %#o, %u, %u) failed with error '%s'",
-                   filename, dev->mode, dev->major, dev->minor, strerror(errno));
+       if (!fake) {
+               retval = mknod(filename, dev->mode, makedev(dev->major, dev->minor));
+               if (retval != 0)
+                       dbg("mknod(%s, %#o, %u, %u) failed with error '%s'",
+                           filename, dev->mode, dev->major, dev->minor, strerror(errno));
+       }
 
        dbg("chmod(%s, %#o)", filename, dev->mode);
-       retval = chmod(filename, dev->mode);
-       if (retval != 0)
-               dbg("chmod(%s, %#o) failed with error '%s'",
-                   filename, dev->mode, strerror(errno));
+       if (!fake) {
+               retval = chmod(filename, dev->mode);
+               if (retval != 0)
+                       dbg("chmod(%s, %#o) failed with error '%s'",
+                           filename, dev->mode, strerror(errno));
+       }
 
        if (dev->owner[0] != '\0') {
                char *endptr;
@@ -195,8 +199,9 @@ static int create_node(struct udevice *dev)
                        strncpy(filename, udev_root, sizeof(filename));
                        strncat(filename, linkname, sizeof(filename));
                        dbg("symlink '%s' to node '%s' requested", filename, dev->name);
-                       if (strrchr(linkname, '/'))
-                               create_path(filename);
+                       if (!fake)
+                               if (strrchr(linkname, '/'))
+                                       create_path(filename);
 
                        /* optimize relative link */
                        linktarget[0] = '\0';
@@ -219,7 +224,7 @@ static int create_node(struct udevice *dev)
 
                        /* unlink existing non-directories to ensure that our symlink
                         * is created */
-                       if (lstat(filename, &stats) == 0) {
+                       if (!fake && (lstat(filename, &stats) == 0)) {
                                if ((stats.st_mode & S_IFMT) != S_IFDIR) {
                                        if (unlink(filename))
                                                dbg("unlink(%s) failed with error '%s'",
@@ -228,10 +233,12 @@ static int create_node(struct udevice *dev)
                        }
 
                        dbg("symlink(%s, %s)", linktarget, filename);
-                       retval = symlink(linktarget, filename);
-                       if (retval != 0)
-                               dbg("symlink(%s, %s) failed with error '%s'",
-                                   linktarget, filename, strerror(errno));
+                       if (!fake) {
+                               retval = symlink(linktarget, filename);
+                               if (retval != 0)
+                                       dbg("symlink(%s, %s) failed with error '%s'",
+                                           linktarget, filename, strerror(errno));
+                       }
                }
        }
 
@@ -289,7 +296,7 @@ exit:
        return retval;
 }
 
-int udev_add_device(char *path, char *subsystem)
+int udev_add_device(char *path, char *subsystem, int fake)
 {
        struct sysfs_class_device *class_dev = NULL;
        struct udevice dev;
@@ -321,15 +328,18 @@ int udev_add_device(char *path, char *subsystem)
        if (retval != 0)
                goto exit;
 
-       retval = udevdb_add_dev(path, &dev);
-       if (retval != 0)
-               dbg("udevdb_add_dev failed, but we are going to try to create the node anyway. "
-                   "But remove might not work properly for this device.");
+       if (!fake) {
+               retval = udevdb_add_dev(path, &dev);
+               if (retval != 0)
+                       dbg("udevdb_add_dev failed, but we are going to try "
+                           "to create the node anyway. But remove might not "
+                           "work properly for this device.");
 
+       }
        dbg("name='%s'", dev.name);
-       retval = create_node(&dev);
+       retval = create_node(&dev, fake);
 
-       if (retval == 0)
+       if ((retval == 0) && (!fake))
                sysbus_send_create(&dev, path);
 
 exit:
diff --git a/udev.c b/udev.c
index 9f10cc212539466e5e03edc05016976d90069e24..ce6d6ce9df22a7b2cb9ab3bb84133d25906d2d18 100644 (file)
--- a/udev.c
+++ b/udev.c
@@ -164,7 +164,7 @@ static int udev_hotplug(int argc, char **argv)
        namedev_init();
 
        if (strcmp(action, "add") == 0)
-               retval = udev_add_device(devpath, subsystem);
+               retval = udev_add_device(devpath, subsystem, 0);
 
        else if (strcmp(action, "remove") == 0)
                retval = udev_remove_device(devpath, subsystem);
diff --git a/udev.h b/udev.h
index 9e01e40492ea8c75cc8bb5958120ea00a8a2ee44..00f1361016d8e743d4503d8c5f08a677f7bdbf66 100644 (file)
--- a/udev.h
+++ b/udev.h
@@ -56,7 +56,7 @@ do { \
        strncpy(to, from, sizeof(to)-1); \
 } while (0)
 
-extern int udev_add_device(char *path, char *subsystem);
+extern int udev_add_device(char *path, char *subsystem, int fake);
 extern int udev_remove_device(char *path, char *subsystem);
 extern void udev_init_config(void);
 extern int parse_get_pair(char **orig_string, char **left, char **right);
index 9f10cc212539466e5e03edc05016976d90069e24..dd8375aa5cfe774814fa3c7872cbec5bd2924dd1 100644 (file)
 
 #include "udev.h"
 #include "udev_version.h"
-#include "udev_dbus.h"
 #include "logging.h"
 #include "namedev.h"
-#include "udevdb.h"
 #include "libsysfs/libsysfs.h"
 
 /* global variables */
@@ -45,12 +43,15 @@ void log_message (int level, const char *format, ...)
 {
        va_list args;
 
-       if (!udev_log)
-               return;
+//     if (!udev_log)
+//             return;
 
+       /* FIXME use level... */
        va_start(args, format);
-       vsyslog(level, format, args);
+       vprintf(format, args);
        va_end(args);
+       if (format[strlen(format)-1] != '\n')
+               printf("\n");
 }
 #endif
 
@@ -59,8 +60,6 @@ static void sig_handler(int signum)
        switch (signum) {
                case SIGINT:
                case SIGTERM:
-                       sysbus_disconnect();
-                       udevdb_exit();
                        exit(20 + signum);
                default:
                        dbg("unhandled signal");
@@ -102,22 +101,15 @@ static char *subsystem_blacklist[] = {
 
 static int udev_hotplug(int argc, char **argv)
 {
-       char *action;
        char *devpath;
        char *subsystem;
        int retval = -EINVAL;
        int i;
        struct sigaction act;
 
-       action = get_action();
-       if (!action) {
-               dbg ("no action?");
-               goto exit;
-       }
-
-       devpath = get_devpath();
+       devpath = argv[1];
        if (!devpath) {
-               dbg ("no devpath?");
+               dbg("no devpath?");
                goto exit;
        }
        dbg("looking at '%s'", devpath);
@@ -140,19 +132,9 @@ static int udev_hotplug(int argc, char **argv)
                i++;
        }
 
-       /* connect to the system message bus */
-       sysbus_connect();
-
        /* initialize our configuration */
        udev_init_config();
 
-       /* initialize udev database */
-       retval = udevdb_init(UDEVDB_DEFAULT);
-       if (retval != 0) {
-               dbg("unable to initialize database");
-               goto exit_sysbus;
-       }
-
        /* set up a default signal handler for now */
        act.sa_handler = sig_handler;
        sigemptyset (&act.sa_mask);
@@ -163,21 +145,7 @@ static int udev_hotplug(int argc, char **argv)
        /* initialize the naming deamon */
        namedev_init();
 
-       if (strcmp(action, "add") == 0)
-               retval = udev_add_device(devpath, subsystem);
-
-       else if (strcmp(action, "remove") == 0)
-               retval = udev_remove_device(devpath, subsystem);
-
-       else {
-               dbg("unknown action '%s'", action);
-               retval = -EINVAL;
-       }
-       udevdb_exit();
-
-exit_sysbus:
-       /* disconnect from the system message bus */
-       sysbus_disconnect();
+       retval = udev_add_device(devpath, subsystem, 1);
 
 exit:
        if (retval > 0)
@@ -191,7 +159,6 @@ int main(int argc, char **argv, char **envp)
        main_argv = argv;
        main_envp = envp;
 
-       init_logging("udev");
        dbg("version %s", UDEV_VERSION);
 
        return udev_hotplug(argc, argv);