If libudev is not available (android!), then just try to find the device in 
/dev.
It's a poor man's solution, but it is better than nothing.

Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>

diff --git a/utils/media-ctl/libmediactl.c b/utils/media-ctl/libmediactl.c
index 4a82d24..1577783 100644
--- a/utils/media-ctl/libmediactl.c
+++ b/utils/media-ctl/libmediactl.c
@@ -441,7 +441,10 @@ static int media_get_devname_udev(struct udev *udev,
        return ret;
 }

-#else  /* HAVE_LIBUDEV */
+#else
+
+#include <dirent.h>
+#include <sys/stat.h>

 struct udev;

@@ -449,10 +452,36 @@ static inline int media_udev_open(struct udev **udev) { 
return 0; }

 static inline void media_udev_close(struct udev *udev) { }

-static inline int media_get_devname_udev(struct udev *udev,
-               struct media_entity *entity)
+static int media_get_devname_udev(struct udev *udev,
+                                 struct media_entity *entity)
 {
-       return -ENOTSUP;
+       DIR *dp;
+       struct dirent *ep;
+       dev_t devnum;
+
+       dp = opendir("/dev");
+       if (dp == NULL) {
+               media_dbg(entity->media, "couldn't open /dev\n");
+               return -ENODEV;
+       }
+       devnum = makedev(entity->info.v4l.major, entity->info.v4l.minor);
+       while ((ep = readdir(dp))) {
+               struct stat st;
+               char fname[256];
+
+               snprintf(fname, sizeof(fname) - 1, "/dev/%s", ep->d_name);
+               fname[sizeof(fname) - 1] = 0;
+               stat(fname, &st);
+               if ((st.st_mode & S_IFMT) != S_IFCHR)
+                       continue;
+               if (st.st_rdev == devnum) {
+                       strncpy(entity->devname, fname, 
sizeof(entity->devname));
+                        entity->devname[sizeof(entity->devname) - 1] = '\0';
+                       return 0;
+               }
+       }
+       closedir(dp);
+       return -ENODEV;
 }

 #endif /* HAVE_LIBUDEV */
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to