Add a wrapper for 'memmem'

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.

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

(cherry picked from commit 1dd1b0a67f6238e13f7f9253fb03addada0541b7)
This commit is contained in:
Neil Roberts 2012-08-07 11:45:29 +01:00 committed by Robert Bragg
parent 12a1ef72c0
commit 0c66431df3
3 changed files with 37 additions and 0 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -1103,6 +1103,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 ================================================================