Message ID | 54589199.10006@cs.ucla.edu |
---|---|
State | New |
Headers | show |
On Tue, Nov 04, 2014 at 12:43:05AM -0800, Paul Eggert wrote: > >I've added: "Earlier versions of obstacks allowed you to use > >@code{obstack_blank} to shrink objects. This will no longer work." > > But this doesn't suffice for obstack_blank_stack, which *can* shrink objects > and where user code relies on this feature. Right, the entire para on shrinking object is now: @cindex shrinking objects You can use @code{obstack_blank_fast} with a ``negative'' size argument to make the current object smaller. Just don't try to shrink it beyond zero length---there's no telling what will happen if you do that. Earlier versions of obstacks allowed you to use @code{obstack_blank} to shrink objects. This will no longer work. > I installed the attached patches to gnulib to try to implement the above; > please let me know of any issues. Thanks for doing all this. I particularly like the removal of obstack_chunk_alloc and obstack_chunk_free casts for version 2, except here: #define obstack_chunkfun(h, newchunkfun) \ ((void) ((h)->chunkfun.extra = _OBSTACK_CAST (void *(*) (void *, size_t), \ newchunkfun))) and in obstack_freefun. I think you need to keep the casts, otherwise you can only specify new extra arg alloc and free functions.
diff --git a/ChangeLog b/ChangeLog index 6728893..274b794 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-11-03 Paul Eggert <eggert@cs.ucla.edu> + + obstack: port to platforms that #define __alignof__ + * lib/obstack.c: Include <alignof.h> if !defined __alignof__, + not if !_LIBC. We don't know of any platforms that #define + __alignof__, but it might be useful in tests. Conversely, + glibc assumes GCC. + 2014-11-03 Pádraig Brady <P@draigBrady.com> linkat: don't unconditionally replace on GNU/Linux diff --git a/lib/obstack.c b/lib/obstack.c index ba7dff3..d763c57 100644 --- a/lib/obstack.c +++ b/lib/obstack.c @@ -48,7 +48,10 @@ #endif #ifndef _OBSTACK_ELIDE_CODE -# if !defined _LIBC && !defined __GNUC__ +/* If GCC, or if an oddball (testing?) host that #defines __alignof__, + use the already-supplied __alignof__. Otherwise, this must be Gnulib + (as glibc assumes GCC); defer to Gnulib's alignof_type. */ +# if !defined __GNUC__ && !defined __alignof__ # include <alignof.h> # define __alignof__(type) alignof_type (type) # endif