Commit d8ccfadb by Ian Lance Taylor

internal/bytealg: support systems that don't have memmem

    
    Reviewed-on: https://go-review.googlesource.com/138839

From-SVN: r264798
parent 3c609d36
098e36f4ddfcf50aeb34509b5f25b86d7050749c bde5ac90e0b4efdf3e9a4d72af4eb23250608611
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -141,6 +141,9 @@ ...@@ -141,6 +141,9 @@
/* Define to 1 if you have the `matherr' function. */ /* Define to 1 if you have the `matherr' function. */
#undef HAVE_MATHERR #undef HAVE_MATHERR
/* Define to 1 if you have the `memmem' function. */
#undef HAVE_MEMMEM
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H #undef HAVE_MEMORY_H
......
...@@ -14781,7 +14781,7 @@ else ...@@ -14781,7 +14781,7 @@ else
fi fi
for ac_func in strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr for ac_func in strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr memmem
do : do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
......
...@@ -544,7 +544,7 @@ AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h ...@@ -544,7 +544,7 @@ AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h
AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr) AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr memmem)
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
......
...@@ -10,6 +10,33 @@ ...@@ -10,6 +10,33 @@
#include "runtime.h" #include "runtime.h"
#include "array.h" #include "array.h"
#ifndef HAVE_MEMMEM
#define memmem goMemmem
static const void *goMemmem(const void *in, size_t inl, const void *s, size_t sl) {
const char *p;
char first;
const char *stop;
if (sl == 0) {
return in;
}
if (inl < sl) {
return nil;
}
first = *(const char *)(s);
stop = (const char *)(in) + (inl - sl);
for (p = (const char *)(in); p <= stop; p++) {
if (*p == first && __builtin_memcmp(p + 1, (const char *)(s) + 1, sl - 1) == 0) {
return (const void *)(p);
}
}
return nil;
}
#endif
intgo Compare(struct __go_open_array, struct __go_open_array) intgo Compare(struct __go_open_array, struct __go_open_array)
__asm__(GOSYM_PREFIX "internal_bytealg.Compare") __asm__(GOSYM_PREFIX "internal_bytealg.Compare")
__attribute__((no_split_stack)); __attribute__((no_split_stack));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment