From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-media@vger.kernel.org
Subject: Re: [v4l-utils PATCH 1/2] libmediactl: Drop length argument from media_get_entity_by_name()
Date: Tue, 24 May 2016 20:09:37 +0300 [thread overview]
Message-ID: <4674976.GzD7drDBGA@avalon> (raw)
In-Reply-To: <1464094083-3637-2-git-send-email-sakari.ailus@linux.intel.com>
Hi Sakari,
Thank you for the patch.
On Tuesday 24 May 2016 15:48:02 Sakari Ailus wrote:
> Recently it was decided that the API dealing with string operations would
> be better to just receive a nul-terminated string rather than a string the
> length of which is defined. This change was implemented for
> v4l2_subdev_string_to_pixelcode() and v4l2_subdev_string_to_field()
> functions by patch "v4l: libv4l2subdev: Drop length argument from string
> conversion functions" (commit id
> 341f4343e6190a7ceb546f7c74fa67e1cc9ae79f).
>
> Do the same change for media_get_entity_by_name() in libmediactl. No other
> functions using length argument for strings remain in libmediactl.
>
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
> utils/media-ctl/libmediactl.c | 19 +++++++++----------
> utils/media-ctl/media-ctl.c | 3 +--
> utils/media-ctl/mediactl.h | 3 +--
> 3 files changed, 11 insertions(+), 14 deletions(-)
>
> diff --git a/utils/media-ctl/libmediactl.c b/utils/media-ctl/libmediactl.c
> index 89ac11c..78caa7c 100644
> --- a/utils/media-ctl/libmediactl.c
> +++ b/utils/media-ctl/libmediactl.c
> @@ -66,21 +66,14 @@ struct media_pad *media_entity_remote_source(struct
> media_pad *pad) }
>
> struct media_entity *media_get_entity_by_name(struct media_device *media,
> - const char *name, size_t length)
> + const char *name)
> {
> unsigned int i;
>
> - /* A match is impossible if the entity name is longer than the maximum
> - * size we can get from the kernel.
> - */
> - if (length >= FIELD_SIZEOF(struct media_entity_desc, name))
> - return NULL;
> -
> for (i = 0; i < media->entities_count; ++i) {
> struct media_entity *entity = &media->entities[i];
>
> - if (strncmp(entity->info.name, name, length) == 0 &&
> - entity->info.name[length] == '\0')
> + if (strcmp(entity->info.name, name) == 0)
While the kernel API guarantees that entity->info.name will be NULL-
terminated, wouldn't it be safer to add a safety check here ?
> return entity;
> }
>
> @@ -804,6 +797,8 @@ struct media_pad *media_parse_pad(struct media_device
> *media, for (; isspace(*p); ++p);
>
> if (*p == '"' || *p == '\'') {
> + char *name;
> +
> for (end = (char *)p + 1; *end && *end != '"' && *end != '\''; ++end);
> if (*end != '"' && *end != '\'') {
> media_dbg(media, "missing matching '\"'\n");
> @@ -811,7 +806,11 @@ struct media_pad *media_parse_pad(struct media_device
> *media, return NULL;
> }
>
> - entity = media_get_entity_by_name(media, p + 1, end - p - 1);
> + name = strndup(p + 1, end - p - 1);
> + if (!name)
> + return NULL;
> + entity = media_get_entity_by_name(media, name);
> + free(name);
> if (entity == NULL) {
> media_dbg(media, "no such entity \"%.*s\"\n", end - p - 1, p + 1);
> *endp = (char *)p + 1;
> diff --git a/utils/media-ctl/media-ctl.c b/utils/media-ctl/media-ctl.c
> index f45ca43..2f049c6 100644
> --- a/utils/media-ctl/media-ctl.c
> +++ b/utils/media-ctl/media-ctl.c
> @@ -559,8 +559,7 @@ int main(int argc, char **argv)
> if (media_opts.entity) {
> struct media_entity *entity;
>
> - entity = media_get_entity_by_name(media, media_opts.entity,
> - strlen(media_opts.entity));
> + entity = media_get_entity_by_name(media, media_opts.entity);
> if (entity == NULL) {
> printf("Entity '%s' not found\n", media_opts.entity);
> goto out;
> diff --git a/utils/media-ctl/mediactl.h b/utils/media-ctl/mediactl.h
> index 77ac182..b5a92f5 100644
> --- a/utils/media-ctl/mediactl.h
> +++ b/utils/media-ctl/mediactl.h
> @@ -245,14 +245,13 @@ static inline unsigned int media_entity_type(struct
> media_entity *entity) * @brief Find an entity by its name.
> * @param media - media device.
> * @param name - entity name.
> - * @param length - size of @a name.
> *
> * Search for an entity with a name equal to @a name.
> *
> * @return A pointer to the entity if found, or NULL otherwise.
> */
> struct media_entity *media_get_entity_by_name(struct media_device *media,
> - const char *name, size_t length);
> + const char *name);
>
> /**
> * @brief Find an entity by its ID.
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2016-05-24 17:09 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-24 12:48 [v4l-utils PATCH 0/2] Prepare for mediatext library, cleanups Sakari Ailus
2016-05-24 12:48 ` [v4l-utils PATCH 1/2] libmediactl: Drop length argument from media_get_entity_by_name() Sakari Ailus
2016-05-24 17:09 ` Laurent Pinchart [this message]
2016-05-24 20:50 ` Sakari Ailus
2016-05-26 12:07 ` Laurent Pinchart
2016-05-26 12:28 ` Sakari Ailus
2016-05-24 12:48 ` [v4l-utils PATCH 2/2] mediactl: Separate entity and pad parsing Sakari Ailus
2016-05-24 17:14 ` Laurent Pinchart
2016-05-24 20:54 ` Sakari Ailus
2016-05-24 20:56 ` [v4l-utils PATCH v1.1 " Sakari Ailus
2016-05-24 22:38 ` Laurent Pinchart
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=4674976.GzD7drDBGA@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=sakari.ailus@linux.intel.com \
/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.