libmediactl: split media_get_devname_sysfs from media_enum_entities
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 5 Sep 2011 15:24:04 +0000 (18:24 +0300)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 6 Sep 2011 10:19:19 +0000 (12:19 +0200)
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
src/media.c

index 3819b69..30d603b 100644 (file)
@@ -245,15 +245,46 @@ static int media_enum_links(struct media_device *media)
        return ret;
 }
 
        return ret;
 }
 
-static int media_enum_entities(struct media_device *media)
+static int media_get_devname_sysfs(struct media_entity *entity)
 {
 {
-       struct media_entity *entity;
        struct stat devstat;
        struct stat devstat;
-       unsigned int size;
        char devname[32];
        char sysname[32];
        char target[1024];
        char *p;
        char devname[32];
        char sysname[32];
        char target[1024];
        char *p;
+       int ret;
+
+       sprintf(sysname, "/sys/dev/char/%u:%u", entity->info.v4l.major,
+               entity->info.v4l.minor);
+       ret = readlink(sysname, target, sizeof(target));
+       if (ret < 0)
+               return -errno;
+
+       target[ret] = '\0';
+       p = strrchr(target, '/');
+       if (p == NULL)
+               return -EINVAL;
+
+       sprintf(devname, "/dev/%s", p + 1);
+       ret = stat(devname, &devstat);
+       if (ret < 0)
+               return -errno;
+
+       /* Sanity check: udev might have reordered the device nodes.
+        * Make sure the major/minor match. We should really use
+        * libudev.
+        */
+       if (major(devstat.st_rdev) == entity->info.v4l.major &&
+           minor(devstat.st_rdev) == entity->info.v4l.minor)
+               strcpy(entity->devname, devname);
+
+       return 0;
+}
+
+static int media_enum_entities(struct media_device *media)
+{
+       struct media_entity *entity;
+       unsigned int size;
        __u32 id;
        int ret = 0;
 
        __u32 id;
        int ret = 0;
 
@@ -292,29 +323,7 @@ static int media_enum_entities(struct media_device *media)
                    media_entity_type(entity) != MEDIA_ENT_T_V4L2_SUBDEV)
                        continue;
 
                    media_entity_type(entity) != MEDIA_ENT_T_V4L2_SUBDEV)
                        continue;
 
-               sprintf(sysname, "/sys/dev/char/%u:%u", entity->info.v4l.major,
-                       entity->info.v4l.minor);
-               ret = readlink(sysname, target, sizeof(target));
-               if (ret < 0)
-                       continue;
-
-               target[ret] = '\0';
-               p = strrchr(target, '/');
-               if (p == NULL)
-                       continue;
-
-               sprintf(devname, "/dev/%s", p + 1);
-               ret = stat(devname, &devstat);
-               if (ret < 0)
-                       continue;
-
-               /* Sanity check: udev might have reordered the device nodes.
-                * Make sure the major/minor match. We should really use
-                * libudev.
-                */
-               if (major(devstat.st_rdev) == entity->info.v4l.major &&
-                   minor(devstat.st_rdev) == entity->info.v4l.minor)
-                       strcpy(entity->devname, devname);
+               media_get_devname_sysfs(entity);
        }
 
        return ret;
        }
 
        return ret;