chiark / gitweb /
fix lookup for name in the udevdb, it should return the devpath
[elogind.git] / udev_db.c
index f9adf5c6317554b6bb53cc9d24989f879b28a21f..9b40a5904e751d531490e8cc2398a8c499b2ef2f 100644 (file)
--- a/udev_db.c
+++ b/udev_db.c
@@ -113,7 +113,7 @@ static int parse_db_file(struct udevice *udev, const char *filename)
        size_t count;
 
        if (file_map(filename, &buf, &bufsize) != 0) {
-               err("unable to read db file '%s'", filename);
+               dbg("no db file to read '%s'", filename);
                return -1;
        }
 
@@ -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) {
-                                       memcpy(devpath, &bufline[2], count-2);
-                                       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))