diff -ruNp udev-076.orig/udev_event.c udev-076/udev_event.c --- udev-076.orig/udev_event.c 2005-11-22 17:34:55.000000000 +0100 +++ udev-076/udev_event.c 2005-11-22 22:57:40.000000000 +0100 @@ -38,6 +38,17 @@ #include "udev_utils.h" #include "list.h" +/* return true if the udev database exists */ +static int dynamic_dev(void) { + char dbpath[PATH_MAX]; + struct stat stats; + + strlcpy(dbpath, udev_root, sizeof(dbpath)); + strlcat(dbpath, "/"DB_DIR, sizeof(dbpath)); + if (stat(dbpath, &stats) == 0) + return 1; + return 0; +} dev_t get_devt(struct sysfs_class_device *class_dev) { @@ -85,6 +97,10 @@ int udev_process_event(struct udev_rules } dbg("opened class_dev->name='%s'", class_dev->name); + if (!dynamic_dev()) + dbg("db not found, ignoring add event for %s", + udev->devpath); + else /* get major/minor */ if (udev->type == DEV_BLOCK || udev->type == DEV_CLASS) udev->devt = get_devt(class_dev); @@ -116,9 +132,14 @@ int udev_process_event(struct udev_rules } else if (strcmp(udev->action, "remove") == 0) { struct name_entry *name_loop; + if (!dynamic_dev()) + dbg("db not found, ignoring remove event for %s", + udev->devpath); + else { /* get data from db, remove db-entry, delete node */ dbg("node remove"); retval = udev_remove_device(udev); + } /* restore stored persistent data */ list_for_each_entry(name_loop, &udev->env_list, node)