mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 13:54:19 +08:00
internal/bytealg: support systems that don't have memmem
Reviewed-on: https://go-review.googlesource.com/138839 From-SVN: r264798
This commit is contained in:
parent
3c609d36a6
commit
d8ccfadbf2
@ -1,4 +1,4 @@
|
||||
098e36f4ddfcf50aeb34509b5f25b86d7050749c
|
||||
bde5ac90e0b4efdf3e9a4d72af4eb23250608611
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -141,6 +141,9 @@
|
||||
/* Define to 1 if you have the `matherr' function. */
|
||||
#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. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
|
2
libgo/configure
vendored
2
libgo/configure
vendored
@ -14781,7 +14781,7 @@ else
|
||||
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 :
|
||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||
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
|
||||
|
||||
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_WAIT4, test "$ac_cv_func_wait4" = yes)
|
||||
|
||||
|
@ -10,6 +10,33 @@
|
||||
#include "runtime.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)
|
||||
__asm__(GOSYM_PREFIX "internal_bytealg.Compare")
|
||||
__attribute__((no_split_stack));
|
||||
|
Loading…
Reference in New Issue
Block a user