chiark / gitweb /
[PATCH] 038 release
[elogind.git] / namedev.c
index 695fb55413910e7507b408425529875f1db4c759..8a4436363d66bdcdff84a79a99e7412c671cf0f2 100644 (file)
--- a/namedev.c
+++ b/namedev.c
@@ -29,7 +29,6 @@
 #include <ctype.h>
 #include <unistd.h>
 #include <errno.h>
-#include <time.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
 #include <sys/sysinfo.h>
@@ -307,6 +306,17 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
                                        dbg("sysfa attribute '%s' not found", attr);
                                        break;
                                }
+                               /* strip trailing whitespace of matching value */
+                               if (isspace(tmpattr->value[strlen(tmpattr->value)-1])) {
+                                       i = len = strlen(tmpattr->value);
+                                       while (i > 0 &&  isspace(tmpattr->value[i-1]))
+                                               i--;
+                                       if (i < len) {
+                                               tmpattr->value[i] = '\0';
+                                               dbg("remove %i trailing whitespace chars from '%s'",
+                                                        len - i, tmpattr->value);
+                                       }
+                               }
                                strfieldcatmax(string, tmpattr->value, maxsize);
                                dbg("substitute sysfs value '%s'", tmpattr->value);
                        } else {
@@ -353,7 +363,6 @@ static struct bus_file {
        {}
 };
 
-#define SECONDS_TO_WAIT_FOR_FILE       10
 static void wait_for_device_to_initialize(struct sysfs_device *sysfs_device)
 {
        /* sleep until we see the file for this specific bus type show up this
@@ -367,14 +376,14 @@ static void wait_for_device_to_initialize(struct sysfs_device *sysfs_device)
        struct bus_file *b = &bus_files[0];
        struct sysfs_attribute *tmpattr;
        int found = 0;
-       int loop = SECONDS_TO_WAIT_FOR_FILE;
+       int loop = WAIT_FOR_FILE_SECONDS * WAIT_FOR_FILE_RETRY_FREQ;
 
        while (1) {
                if (b->bus == NULL) {
                        if (!found)
                                break;
-                       /* sleep to give the kernel a chance to create the file */
-                       sleep(1);
+                       /* give the kernel a chance to create the file */
+                       usleep(1000 * 1000 / WAIT_FOR_FILE_RETRY_FREQ);
                        --loop;
                        if (loop == 0)
                                break;
@@ -394,7 +403,8 @@ static void wait_for_device_to_initialize(struct sysfs_device *sysfs_device)
        }
        if (!found)
                dbg("did not find bus type '%s' on list of bus_id_files, "
-                   "contact greg@kroah.com", sysfs_device->bus);
+                   "please report to <linux-hotplug-devel@lists.sourceforge.net>",
+                   sysfs_device->bus);
 exit:
        return; /* here to prevent compiler warning... */
 }
@@ -680,7 +690,6 @@ static struct sysfs_device *get_sysfs_device(struct sysfs_class_device *class_de
 {
        struct sysfs_device *sysfs_device;
        struct sysfs_class_device *class_dev_parent;
-       struct timespec tspec;
        int loop;
 
        /* Figure out where the device symlink is at.  For char devices this will
@@ -696,16 +705,14 @@ static struct sysfs_device *get_sysfs_device(struct sysfs_class_device *class_de
        if (class_dev_parent != NULL) 
                dbg("given class device has a parent, use this instead");
 
-       tspec.tv_sec = 0;
-       tspec.tv_nsec = 10000000;  /* sleep 10 millisec */
-       loop = 10;
+       loop = WAIT_FOR_FILE_SECONDS * WAIT_FOR_FILE_RETRY_FREQ;
        while (loop--) {
                if (udev_sleep) {
                        if (whitelist_search(class_dev)) {
                                sysfs_device = NULL;
                                goto exit;
                        }
-                       nanosleep(&tspec, NULL);
+                       usleep(1000 * 1000 / WAIT_FOR_FILE_RETRY_FREQ);
                }
 
                if (class_dev_parent)
@@ -727,11 +734,9 @@ device_found:
                if (sysfs_device->bus[0] != '\0')
                        goto bus_found;
 
-               loop = 10;
-               tspec.tv_nsec = 10000000;
                while (loop--) {
                        if (udev_sleep)
-                               nanosleep(&tspec, NULL);
+                               usleep(1000 * 1000 / WAIT_FOR_FILE_RETRY_FREQ);
                        sysfs_get_device_bus(sysfs_device);
                        
                        if (sysfs_device->bus[0] != '\0')