This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 0/5] obstacks again
- From: PÃdraig Brady <P at draigBrady dot com>
- To: Eric Blake <eblake at redhat dot com>, Paul Eggert <eggert at cs dot ucla dot edu>, Alan Modra <amodra at gmail dot com>
- Cc: libc-alpha at sourceware dot org, bug-gnulib at gnu dot org
- Date: Tue, 30 Dec 2014 00:04:20 +0000
- Subject: Re: [PATCH 0/5] obstacks again
- Authentication-results: sourceware.org; auth=none
- References: <20141029033201 dot GI4267 at bubble dot grove dot modra dot org> <5450983F dot 3030608 at cs dot ucla dot edu> <20141029220223 dot GP4267 at bubble dot grove dot modra dot org> <5451B1F6 dot 7060305 at cs dot ucla dot edu> <548203C3 dot 6040601 at redhat dot com>
On 05/12/14 19:13, Eric Blake wrote:
> On 10/29/2014 09:35 PM, Paul Eggert wrote:
>> Alan Modra wrote:
>>
>>> One thing though, I didn't put the ChangeLog diffs in the patch as I
>>> usually add them when committing.
>>
>> Oh, I missed that. I added them now. For Gnulib it's better to put
>> them into the patch.
>>
>>> It is no longer possible to shrink an obstack with obstack_blank (but
>>> you can still do that with obstack_blank_fast).
>>
>> Ouch, I hadn't noticed that. That's an incompatible change and I expect
>> it will break real-world usage for no particularly good reason, so we
>> really need to fix this. How about making the 2nd argument to
>> obstack_blank and obstack_blank_fast be of type ptrdiff_t rather than
>> size_t?
>
> It breaks GNU M4, for a starter :) But at least we predicted that it
> would happen, and I'm hoping the fallback of obstack_blank_fast does the
> job.
For reference ls is also impacted. Hopefully this suffices:
diff --git a/src/ls.c b/src/ls.c
index 82402ee..5bee5e6 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -990,7 +990,7 @@ dev_ino_pop (void)
struct dev_ino *di;
int dev_ino_size = sizeof *di;
assert (dev_ino_size <= obstack_object_size (&dev_ino_obstack));
- obstack_blank (&dev_ino_obstack, -dev_ino_size);
+ obstack_blank_fast (&dev_ino_obstack, -dev_ino_size);
vdi = obstack_next_free (&dev_ino_obstack);
di = vdi;
return *di;
thanks,
PÃdraig.