[Cogl] [PATCH 3/8] Add a wrapper for 'memmem'

Robert Bragg robert at sixbynine.org
Thu Aug 9 10:15:30 PDT 2012


This looks good to land to me:

Reviewed-by: Robert Bragg <robert at linux.intel.com>

thanks,
- Robert

On Thu, Aug 9, 2012 at 5:08 PM, Neil Roberts <neil at linux.intel.com> wrote:
> memmem is a GNU libc extension that works like strstr except that the
> size of the needle and the haystack are passed into the function
> instead of using null-terminated strings.
>
> This patch adds a wrapper function called 'cogl_util_memmem' so that
> we can use this function. There is a configure check and if the
> function is not available then a fallback implementation will be used.
> Otherwise cogl_util_memmem is just defined to memmem.
> ---
>  cogl/cogl-util.c | 24 ++++++++++++++++++++++++
>  cogl/cogl-util.h | 10 ++++++++++
>  configure.ac     |  3 +++
>  3 files changed, 37 insertions(+)
>
> diff --git a/cogl/cogl-util.c b/cogl/cogl-util.c
> index e8ffb04..9ecc34c 100644
> --- a/cogl/cogl-util.c
> +++ b/cogl/cogl-util.c
> @@ -25,6 +25,8 @@
>  #include "config.h"
>  #endif
>
> +#include <string.h>
> +
>  #include "cogl-util.h"
>  #include "cogl-private.h"
>
> @@ -252,4 +254,26 @@ _cogl_util_pixel_format_from_masks (unsigned long r_mask,
>    return image_format;
>  }
>
> +#ifndef HAVE_MEMMEM
> +
> +char *
> +_cogl_util_memmem (const void *haystack,
> +                   size_t haystack_len,
> +                   const void *needle,
> +                   size_t needle_len)
> +{
> +  size_t i;
> +
> +  if (needle_len > haystack_len)
> +    return NULL;
> +
> +  for (i = 0; i <= haystack_len - needle_len; i++)
> +    if (!memcmp ((const char *) haystack + i, needle, needle_len))
> +      return (char *) haystack + i;
> +
> +  return NULL;
> +}
> +
> +#endif /* HAVE_MEMMEM */
> +
>  #endif /* _COGL_IN_TEST_BITMASK */
> diff --git a/cogl/cogl-util.h b/cogl/cogl-util.h
> index 67861bc..4fb4227 100644
> --- a/cogl/cogl-util.h
> +++ b/cogl/cogl-util.h
> @@ -268,4 +268,14 @@ _cogl_util_pixel_format_from_masks (unsigned long r_mask,
>  #define _Static_assert(EXPRESSION, MESSAGE)
>  #endif
>
> +#ifdef HAVE_MEMMEM
> +#define _cogl_util_memmem memmem
> +#else
> +char *
> +_cogl_util_memmem (const void *haystack,
> +                   size_t haystack_len,
> +                   const void *needle,
> +                   size_t needle_len);
> +#endif
> +
>  #endif /* __COGL_UTIL_H */
> diff --git a/configure.ac b/configure.ac
> index 685cee1..6764ee7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1094,6 +1094,9 @@ dnl The 'ffs' function is part of C99 so it isn't always
>  dnl available. Cogl has a fallback if needed.
>  AC_CHECK_FUNCS([ffs])
>
> +dnl 'memmem' is a GNU extension but we have a simple fallback
> +AC_CHECK_FUNCS([memmem])
> +
>  dnl ================================================================
>  dnl Platform values
>  dnl ================================================================
> --
> 1.7.11.3.g3c3efa5
>
> _______________________________________________
> Cogl mailing list
> Cogl at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/cogl


More information about the Cogl mailing list