diff options
author | Ben Pfaff <blp@nicira.com> | 2009-06-10 14:16:40 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2009-06-10 15:31:20 -0700 |
commit | e50097d233cb52551702165324514cb6018a7627 (patch) | |
tree | b089af77a85d083f577654a595228a4f8d733040 /acinclude.m4 | |
parent | d798447957d98428fdddae744f2e58d2802286d8 (diff) |
Fix glibc 2.7 strtok_r() bug in a more permanent fashion.
The glibc 2.7 headers contain a bug that causes strtok_r() to segfault
in some circumstances. Until now, we have been working around this
problem at each invocation, but this depends on the programmer to remember
to do so each time.
This commit instead adds a shim that adds a work-around to the string.h
header itself, so that it is much more difficult to miss the workaround.
Diffstat (limited to 'acinclude.m4')
-rw-r--r-- | acinclude.m4 | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/acinclude.m4 b/acinclude.m4 index f16bbf4b..1e7989f0 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -154,6 +154,37 @@ AC_DEFUN([OVS_CHECK_IF_PACKET], [Define to 1 if net/if_packet.h is available.]) fi]) +dnl Checks for buggy strtok_r. +dnl +dnl Some versions of glibc 2.7 has a bug in strtok_r when compiling +dnl with optimization that can cause segfaults: +dnl +dnl http://sources.redhat.com/bugzilla/show_bug.cgi?id=5614. +AC_DEFUN([OVS_CHECK_STRTOK_R], + [AC_CACHE_CHECK( + [whether strtok_r macro segfaults on some inputs], + [ovs_cv_strtok_r_bug], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM([#include <stdio.h> + #include <string.h> + ], + [[char string[] = ":::"; + char *save_ptr = (char *) 0xc0ffee; + char *token1, *token2; + token1 = strtok_r(string, ":", &save_ptr); + token2 = strtok_r(NULL, ":", &save_ptr); + printf ("%s %s\n", token1, token2); + return 0; + ]])], + [ovs_cv_strtok_r_bug=no], + [ovs_cv_strtok_r_bug=yes], + [ovs_cv_strtok_r_bug=yes])]) + if test $ovs_cv_strtok_r_bug = yes; then + AC_DEFINE([HAVE_STRTOK_R_BUG], [1], + [Define if strtok_r macro segfaults on some inputs]) + fi +]) + dnl ---------------------------------------------------------------------- dnl These macros are from GNU PSPP, with the following original license: dnl Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. |