From: Paul Eggert Date: Tue, 4 Nov 2014 00:36:27 +0000 (-0800) Subject: obstack: do not assume system-supplied obstack is size_t safe X-Git-Tag: v1.0~7268 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=9a6b2eec0910bec11ba5cc1b9b903c838fea82d8;p=gnulib.git obstack: do not assume system-supplied obstack is size_t safe * m4/obstack.m4: New file. * modules/obstack (Files): Add it. --- diff --git a/ChangeLog b/ChangeLog index 274b7948ee..23accbec53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2014-11-03 Paul Eggert + obstack: do not assume system-supplied obstack is size_t safe + * m4/obstack.m4: New file. + * modules/obstack (Files): Add it. + obstack: port to platforms that #define __alignof__ * lib/obstack.c: Include if !defined __alignof__, not if !_LIBC. We don't know of any platforms that #define diff --git a/m4/obstack.m4 b/m4/obstack.m4 new file mode 100644 index 0000000000..bc5b4a4068 --- /dev/null +++ b/m4/obstack.m4 @@ -0,0 +1,35 @@ +# See if we need to provide obstacks. + +dnl Copyright 1996-2014 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This replaces Autoconf's AC_FUNC_OBSTACK. +dnl The Autoconf version should be marked obsolete at some point. + +AC_DEFUN([AC_FUNC_OBSTACK], + [AC_LIBSOURCES([obstack.h, obstack.c])dnl + AC_CACHE_CHECK([for obstacks that work with any size object], + [ac_cv_func_obstack], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include "obstack.h" + void *obstack_chunk_alloc (size_t n) { return 0; } + void obstack_chunk_free (void *p) { } + /* Check that an internal function returns size_t, not int. */ + size_t _obstack_memory_used (struct obstack *); + ]], + [[struct obstack mem; + obstack_init (&mem); + obstack_free (&mem, 0); + ]])], + [ac_cv_func_obstack=yes], + [ac_cv_func_obstack=no])]) + if test "$ac_cv_func_obstack" = yes; then + AC_DEFINE([HAVE_OBSTACK], 1, + [Define to 1 if the system has obstacks that work with any size object.]) + else + AC_LIBOBJ([obstack]) + fi +]) diff --git a/modules/obstack b/modules/obstack index 36dc444537..e0b528e418 100644 --- a/modules/obstack +++ b/modules/obstack @@ -4,6 +4,7 @@ Memory allocation, optimized for stack-like allocation patterns. Files: lib/obstack.h lib/obstack.c +m4/obstack.m4 Depends-on: alignof