diff options
| author | Thomas Guyot-Sionnest <dermoth@aei.ca> | 2010-04-07 21:11:46 -0400 |
|---|---|---|
| committer | Thomas Guyot-Sionnest <dermoth@aei.ca> | 2010-04-12 21:26:35 -0400 |
| commit | 74da141e618ef99959d509cb2e7be35a348a39db (patch) | |
| tree | 88ebc38b381a1021fc2d74864a71e230ae591c3d /gl/m4/memchr.m4 | |
| parent | c63a4f726a0b6ad8cf6040f947754a81fd4683bb (diff) | |
| download | monitoring-plugins-74da141e618ef99959d509cb2e7be35a348a39db.tar.gz | |
Sync with the latest Gnulib code (177f525)
Signed-off-by: Thomas Guyot-Sionnest <dermoth@aei.ca>
Diffstat (limited to 'gl/m4/memchr.m4')
| -rw-r--r-- | gl/m4/memchr.m4 | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/gl/m4/memchr.m4 b/gl/m4/memchr.m4 new file mode 100644 index 00000000..ab773b81 --- /dev/null +++ b/gl/m4/memchr.m4 | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | # memchr.m4 serial 8 | ||
| 2 | dnl Copyright (C) 2002-2004, 2009-2010 Free Software Foundation, Inc. | ||
| 3 | dnl This file is free software; the Free Software Foundation | ||
| 4 | dnl gives unlimited permission to copy and/or distribute it, | ||
| 5 | dnl with or without modifications, as long as this notice is preserved. | ||
| 6 | |||
| 7 | AC_DEFUN_ONCE([gl_FUNC_MEMCHR], | ||
| 8 | [ | ||
| 9 | dnl Check for prerequisites for memory fence checks. | ||
| 10 | gl_FUNC_MMAP_ANON | ||
| 11 | AC_CHECK_HEADERS_ONCE([sys/mman.h]) | ||
| 12 | AC_CHECK_FUNCS_ONCE([mprotect]) | ||
| 13 | |||
| 14 | dnl These days, we assume memchr is present. But just in case... | ||
| 15 | AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) | ||
| 16 | AC_CHECK_FUNCS_ONCE([memchr]) | ||
| 17 | if test $ac_cv_func_memchr = yes; then | ||
| 18 | # Detect platform-specific bugs in some versions of glibc: | ||
| 19 | # memchr should not dereference anything with length 0 | ||
| 20 | # http://bugzilla.redhat.com/499689 | ||
| 21 | # memchr should not dereference overestimated length after a match | ||
| 22 | # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 | ||
| 23 | # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 | ||
| 24 | # Assume that memchr works on platforms that lack mprotect. | ||
| 25 | AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], | ||
| 26 | [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ | ||
| 27 | #include <string.h> | ||
| 28 | #if HAVE_SYS_MMAN_H | ||
| 29 | # include <fcntl.h> | ||
| 30 | # include <unistd.h> | ||
| 31 | # include <sys/types.h> | ||
| 32 | # include <sys/mman.h> | ||
| 33 | # ifndef MAP_FILE | ||
| 34 | # define MAP_FILE 0 | ||
| 35 | # endif | ||
| 36 | #endif | ||
| 37 | ]], [[ | ||
| 38 | char *fence = NULL; | ||
| 39 | #if HAVE_SYS_MMAN_H && HAVE_MPROTECT | ||
| 40 | # if HAVE_MAP_ANONYMOUS | ||
| 41 | const int flags = MAP_ANONYMOUS | MAP_PRIVATE; | ||
| 42 | const int fd = -1; | ||
| 43 | # else /* !HAVE_MAP_ANONYMOUS */ | ||
| 44 | const int flags = MAP_FILE | MAP_PRIVATE; | ||
| 45 | int fd = open ("/dev/zero", O_RDONLY, 0666); | ||
| 46 | if (fd >= 0) | ||
| 47 | # endif | ||
| 48 | { | ||
| 49 | int pagesize = getpagesize (); | ||
| 50 | char *two_pages = | ||
| 51 | (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, | ||
| 52 | flags, fd, 0); | ||
| 53 | if (two_pages != (char *)(-1) | ||
| 54 | && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) | ||
| 55 | fence = two_pages + pagesize; | ||
| 56 | } | ||
| 57 | #endif | ||
| 58 | if (fence) | ||
| 59 | { | ||
| 60 | if (memchr (fence, 0, 0)) | ||
| 61 | return 1; | ||
| 62 | strcpy (fence - 9, "12345678"); | ||
| 63 | if (memchr (fence - 9, 0, 79) != fence - 1) | ||
| 64 | return 2; | ||
| 65 | } | ||
| 66 | return 0; | ||
| 67 | ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], | ||
| 68 | [dnl Be pessimistic for now. | ||
| 69 | gl_cv_func_memchr_works="guessing no"])]) | ||
| 70 | if test "$gl_cv_func_memchr_works" != yes; then | ||
| 71 | REPLACE_MEMCHR=1 | ||
| 72 | fi | ||
| 73 | else | ||
| 74 | HAVE_MEMCHR=0 | ||
| 75 | fi | ||
| 76 | if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then | ||
| 77 | AC_LIBOBJ([memchr]) | ||
| 78 | gl_PREREQ_MEMCHR | ||
| 79 | fi | ||
| 80 | ]) | ||
| 81 | |||
| 82 | # Prerequisites of lib/memchr.c. | ||
| 83 | AC_DEFUN([gl_PREREQ_MEMCHR], [ | ||
| 84 | AC_CHECK_HEADERS([bp-sym.h]) | ||
| 85 | ]) | ||
