diff mbox

[0/5] obstacks again

Message ID 545A7E84.1000306@cs.ucla.edu
State Not Applicable
Headers show

Commit Message

Paul Eggert Nov. 5, 2014, 7:46 p.m. UTC
On 11/05/2014 03:21 AM, Alan Modra wrote:
> I think you need to keep the casts, otherwise
> you can only specify new extra arg alloc and free functions.
Thanks for catching that; I installed the attached fix into gnulib.  It 
is annoying that gcc -Wall complains about using malloc and free here, 
but it's been that way for years and this is not a regression.

Another possibility might be to deprecate obstack_chunkfun and 
obstack_freefun, as they're not documented; but that is a separable issue.

I like your latest doc change; thanks.
diff mbox

Patch

From 23a342e748c0918e2fb2a43f6cbce1919e886ba7 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 5 Nov 2014 11:41:57 -0800
Subject: [PATCH] obstack: do not reject malloc-style obstack_chunkfun,
 obstack_freefun

Problem reported by Alan Modra in:
http://lists.gnu.org/archive/html/bug-gnulib/2014-11/msg00007.html
* lib/obstack.h (obstack_chunkfun, obstack_freefun):
Always cast the function arg, reverting this part of the previous
change.
---
 ChangeLog     | 9 +++++++++
 lib/obstack.h | 6 ++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3b3af67..7e03d07 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@ 
+2014-11-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	obstack: do not reject malloc-style obstack_chunkfun, obstack_freefun
+	Problem reported by Alan Modra in:
+	http://lists.gnu.org/archive/html/bug-gnulib/2014-11/msg00007.html
+	* lib/obstack.h (obstack_chunkfun, obstack_freefun):
+	Always cast the function arg, reverting this part of the previous
+	change.
+
 2014-11-04  Paul Eggert  <eggert@cs.ucla.edu>
 
 	obstack: avoid potentially-nonportable function casts
diff --git a/lib/obstack.h b/lib/obstack.h
index 7b6dee8..befe1c2 100644
--- a/lib/obstack.h
+++ b/lib/obstack.h
@@ -257,12 +257,10 @@  extern int obstack_exit_failure;
                     _OBSTACK_CAST (void (*) (void *, void *), freefun), arg)
 
 #define obstack_chunkfun(h, newchunkfun)				      \
-  ((void) ((h)->chunkfun.extra = _OBSTACK_CAST (void *(*) (void *, size_t),   \
-                                                newchunkfun)))
+  ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun)))
 
 #define obstack_freefun(h, newfreefun)					      \
-  ((void) ((h)->freefun.extra = _OBSTACK_CAST (void (*) (void *, void *),     \
-                                               newfreefun)))
+  ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun)))
 
 #define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar)))
 
-- 
1.9.3