chiark / gitweb /
fix lookup for name in the udevdb, it should return the devpath
authorKay Sievers <kay.sievers@suse.de>
Fri, 26 Aug 2005 20:43:49 +0000 (22:43 +0200)
committerKay Sievers <kay.sievers@suse.de>
Fri, 26 Aug 2005 20:43:49 +0000 (22:43 +0200)
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
udev_db.c

index 632f6f7b2a56c948090de09e6e37026e86aa1e96..9b40a5904e751d531490e8cc2398a8c499b2ef2f 100644 (file)
--- a/udev_db.c
+++ b/udev_db.c
@@ -207,6 +207,8 @@ int udev_db_get_device(struct udevice *udev, const char *devpath)
 int udev_db_search_name(char *devpath, size_t len, const char *name)
 {
        DIR *dir;
+       char path[PATH_SIZE];
+       int found = 0;
 
        dir = opendir(udev_db_path);
        if (dir == NULL) {
@@ -214,10 +216,9 @@ int udev_db_search_name(char *devpath, size_t len, const char *name)
                return -1;
        }
 
-       while (1) {
+       while (!found) {
                struct dirent *ent;
                char filename[PATH_SIZE];
-               char path[PATH_SIZE];
                char nodename[PATH_SIZE];
                char *bufline;
                char *buf;
@@ -242,7 +243,7 @@ int udev_db_search_name(char *devpath, size_t len, const char *name)
                }
 
                cur = 0;
-               while (cur < bufsize) {
+               while (cur < bufsize && !found) {
                        count = buf_get_line(buf, bufsize, cur);
                        bufline = &buf[cur];
                        cur += count+1;
@@ -262,11 +263,8 @@ int udev_db_search_name(char *devpath, size_t len, const char *name)
                                nodename[count-2] = '\0';
                                dbg("compare '%s' '%s'", nodename, name);
                                if (strcmp(nodename, name) == 0) {
-                                       strlcpy(devpath, nodename, len);
-                                       devpath[count-2] = '\0';
-                                       file_unmap(buf, bufsize);
-                                       closedir(dir);
-                                       return 0;
+                                       found = 1;
+                                       break;
                                }
                                break;
                        default:
@@ -277,7 +275,11 @@ int udev_db_search_name(char *devpath, size_t len, const char *name)
        }
 
        closedir(dir);
-       return -1;
+       if (found) {
+               strlcpy(devpath, path, len);
+               return 0;
+       } else
+               return -1;
 }
 
 int udev_db_dump_names(int (*handler_function)(const char *path, const char *name))