This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH] obstack_printf fix (fixes localedef)


Hi!

We cannot call obstack_blank, because we call then
  _IO_str_init_static (&new_f.ofile.file.file, obstack_base (obstack),
                       size, obstack_next_free (obstack));
			     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
and obstack_next_free points to wrong place in that case (64bytes away from
where it should).
With this patch, obstack_printf seems to work just fine to me even in the
case where it is called with
obstack_object_size (obstack) == obstack_room (obstack) == 0.

2000-06-27  Jakub Jelinek  <jakub@redhat.com>

	* libio/obprintf.c (_IO_obstack_vprintf): Call obstack_make_room,
	not obstack_blank.

--- libc/libio/obprintf.c.jj	Tue Apr  4 01:32:57 2000
+++ libc/libio/obprintf.c	Tue Jun 27 12:12:11 2000
@@ -144,14 +144,13 @@ _IO_obstack_vprintf (struct obstack *obs
       /* We have to handle the allocation a bit different since the
 	 `_IO_str_init_static' function would handle a size of zero
 	 different from what we expect.  */
-      size = 64;
 
       /* Get more memory.  */
-      obstack_blank (obstack, size);
+      obstack_make_room (obstack, 64);
 
-      /* Recompute who much room we have.  */
+      /* Recompute how much room we have.  */
       room = obstack_room (obstack);
-      size += room;
+      size = room;
 
       assert (size != 0);
     }

	Jakub

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]