From: "L. Hanisch" <dvb@flensrocker.de>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
linux-media@vger.kernel.org
Subject: Re: [media-ctl][PATCH] libmediactl: engage udev to get devname
Date: Tue, 30 Aug 2011 22:20:59 +0200 [thread overview]
Message-ID: <4E5D462B.50702@flensrocker.de> (raw)
In-Reply-To: <4a6d0bf1e50189da0c02e2326c3413d9088926c1.1313410776.git.andriy.shevchenko@linux.intel.com>
Hi,
Am 15.08.2011 14:20, schrieb Andy Shevchenko:
> Signed-off-by: Andy Shevchenko<andriy.shevchenko@linux.intel.com>
> ---
> configure.in | 10 ++++++++
> src/Makefile.am | 2 +
> src/media.c | 66 ++++++++++++++++++++++++++----------------------------
> 3 files changed, 44 insertions(+), 34 deletions(-)
>
> diff --git a/configure.in b/configure.in
> index fd4c70c..63432ba 100644
> --- a/configure.in
> +++ b/configure.in
> @@ -12,6 +12,16 @@ AC_PROG_CC
> AC_PROG_LIBTOOL
>
> # Checks for libraries.
> +PKG_CHECK_MODULES(libudev, libudev, have_libudev=yes, have_libudev=no)
> +
> +if test x$have_libudev = xyes; then
> + LIBUDEV_CFLAGS="$lbudev_CFLAGS"
Just reading it, shouldn't it be
LIBUDEV_CFLAGS="$libudev_CFLAGS"
Regards,
Lars.
> + LIBUDEV_LIBS="$libudev_LIBS"
> + AC_SUBST(LIBUDEV_CFLAGS)
> + AC_SUBST(LIBUDEV_LIBS)
> +else
> + AC_MSG_ERROR([libudev is required])
> +fi
>
> # Kernel headers path.
> AC_ARG_WITH(kernel-headers,
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 267ea83..52628d2 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -5,6 +5,8 @@ mediactl_includedir=$(includedir)/mediactl
> mediactl_include_HEADERS = media.h subdev.h
>
> bin_PROGRAMS = media-ctl
> +media_ctl_CFLAGS = $(LIBUDEV_CFLAGS)
> +media_ctl_LDFLAGS = $(LIBUDEV_LIBS)
> media_ctl_SOURCES = main.c options.c options.h tools.h
> media_ctl_LDADD = libmediactl.la libv4l2subdev.la
>
> diff --git a/src/media.c b/src/media.c
> index e3cab86..000d750 100644
> --- a/src/media.c
> +++ b/src/media.c
> @@ -31,6 +31,8 @@
> #include<linux/videodev2.h>
> #include<linux/media.h>
>
> +#include<libudev.h>
> +
> #include "media.h"
> #include "tools.h"
>
> @@ -247,15 +249,20 @@ static int media_enum_links(struct media_device *media)
>
> static int media_enum_entities(struct media_device *media)
> {
> + struct udev *udev;
> + dev_t devnum;
> + struct udev_device *device;
> struct media_entity *entity;
> - struct stat devstat;
> unsigned int size;
> - char devname[32];
> - char sysname[32];
> - char target[1024];
> - char *p;
> + const char *p;
> __u32 id;
> - int ret;
> + int ret = 0;
> +
> + udev = udev_new();
> + if (udev == NULL) {
> + printf("unable to allocate memory for context\n");
> + return -ENOMEM;
> + }
>
> for (id = 0; ; id = entity->info.id) {
> size = (media->entities_count + 1) * sizeof(*media->entities);
> @@ -268,9 +275,9 @@ static int media_enum_entities(struct media_device *media)
>
> ret = ioctl(media->fd, MEDIA_IOC_ENUM_ENTITIES,&entity->info);
> if (ret< 0) {
> - if (errno == EINVAL)
> - break;
> - return -errno;
> + if (errno != EINVAL)
> + ret = -errno;
> + break;
> }
>
> /* Number of links (for outbound links) plus number of pads (for
> @@ -281,8 +288,10 @@ static int media_enum_entities(struct media_device *media)
>
> entity->pads = malloc(entity->info.pads * sizeof(*entity->pads));
> entity->links = malloc(entity->max_links * sizeof(*entity->links));
> - if (entity->pads == NULL || entity->links == NULL)
> - return -ENOMEM;
> + if (entity->pads == NULL || entity->links == NULL) {
> + ret = -ENOMEM;
> + break;
> + }
>
> media->entities_count++;
>
> @@ -291,32 +300,21 @@ static int media_enum_entities(struct media_device *media)
> 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;
> + devnum = makedev(entity->info.v4l.major, entity->info.v4l.minor);
> + printf("looking up device: %u:%u\n", major(devnum), minor(devnum));
> + device = udev_device_new_from_devnum(udev, 'c', devnum);
> + if (device) {
> + p = udev_device_get_devnode(device);
> + if (p)
> + snprintf(entity->devname, sizeof(entity->devname),
> + "%s", p);
> + }
>
> - /* 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);
> + udev_device_unref(device);
> }
>
> - return 0;
> + udev_unref(udev);
> + return ret;
> }
>
> struct media_device *media_open(const char *name, int verbose)
prev parent reply other threads:[~2011-08-30 20:32 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-15 12:20 [media-ctl][PATCH] libmediactl: engage udev to get devname Andy Shevchenko
2011-08-15 14:52 ` Laurent Pinchart
2011-08-16 7:20 ` Andy Shevchenko
2011-08-16 10:28 ` [media-ctl][PATCHv2 1/4] libmediactl: restruct error path Andy Shevchenko
2011-08-16 10:28 ` [media-ctl][PATCHv2 2/4] libmediactl: split media_get_devname from media_enum_entities Andy Shevchenko
2011-08-16 10:28 ` [media-ctl][PATCHv2 3/4] libmediactl: use udev conditionally to get a devname Andy Shevchenko
2011-08-30 19:01 ` Laurent Pinchart
2011-09-02 8:39 ` [media-ctl][PATCHv3 1/3] libmediactl: restruct error path Andy Shevchenko
2011-09-02 8:39 ` [media-ctl][PATCHv3 2/3] libmediactl: split media_get_devname_sysfs from media_enum_entities Andy Shevchenko
2011-09-02 8:39 ` [media-ctl][PATCHv3 3/3] libmediactl: get the device name via udev Andy Shevchenko
2011-08-30 19:14 ` [media-ctl][PATCHv2 3/4] libmediactl: use udev conditionally to get a devname Laurent Pinchart
2011-09-02 8:42 ` Andy Shevchenko
2011-09-02 11:17 ` Laurent Pinchart
2011-09-02 11:21 ` Andy Shevchenko
2011-09-02 11:26 ` Laurent Pinchart
2011-09-02 13:09 ` [media-ctl][PATCHv4 1/3] libmediactl: restruct error path Andy Shevchenko
2011-09-02 13:09 ` [media-ctl][PATCHv4 2/3] libmediactl: split media_get_devname_sysfs from media_enum_entities Andy Shevchenko
2011-09-02 13:09 ` [media-ctl][PATCHv4 3/3] libmediactl: get the device name via udev Andy Shevchenko
2011-09-05 10:31 ` Laurent Pinchart
2011-09-05 14:48 ` Andy Shevchenko
2011-09-05 14:57 ` Laurent Pinchart
2011-09-05 15:24 ` [media-ctl][PATCHv5 1/5] libmediactl: restruct error path Andy Shevchenko
2011-09-05 15:24 ` [media-ctl][PATCHv5 2/5] libmediactl: split media_get_devname_sysfs from media_enum_entities Andy Shevchenko
2011-09-05 15:24 ` [media-ctl][PATCHv5 3/5] libmediactl: get the device name via udev Andy Shevchenko
2011-09-05 15:24 ` [media-ctl][PATCHv5 4/5] libmediactl: simplify code by introducing close_and_free inliner Andy Shevchenko
2011-09-05 15:24 ` [media-ctl][PATCHv5 5/5] libmediactl: get rid of memset via using calloc Andy Shevchenko
2011-09-06 10:25 ` [media-ctl][PATCHv5 1/5] libmediactl: restruct error path Laurent Pinchart
2011-09-06 10:46 ` Andy Shevchenko
2011-09-06 10:50 ` Andy Shevchenko
2011-09-06 11:30 ` Laurent Pinchart
2011-09-06 8:14 ` [media-ctl][PATCHv4 3/3] libmediactl: get the device name via udev Andy Shevchenko
2011-08-16 10:28 ` [media-ctl][PATCHv2 4/4] libmediactl: pass verbose to media_get_devname Andy Shevchenko
2011-08-30 20:20 ` L. Hanisch [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E5D462B.50702@flensrocker.de \
--to=dvb@flensrocker.de \
--cc=andriy.shevchenko@linux.intel.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.