Message ID | 20170619162236.49362402AEC3C@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
On 19/06/2017 13:22, Florian Weimer wrote: > 2017-06-19 Florian Weimer <fweimer@redhat.com> > > * stdio-common/_i18n_number.h (_i18n_number_rewrite): Use struct > scratch_buffer. LGTM, thanks. > > diff --git a/stdio-common/_i18n_number.h b/stdio-common/_i18n_number.h > index 080e814..13d5936 100644 > --- a/stdio-common/_i18n_number.h > +++ b/stdio-common/_i18n_number.h > @@ -19,6 +19,7 @@ > #include <stdbool.h> > #include <wchar.h> > #include <wctype.h> > +#include <scratch_buffer.h> > > #include "../locale/outdigits.h" > #include "../locale/outdigitswc.h" > @@ -65,17 +66,13 @@ _i18n_number_rewrite (CHAR_T *w, CHAR_T *rear_ptr, CHAR_T *end) > > /* Copy existing string so that nothing gets overwritten. */ > CHAR_T *src; > - bool use_alloca = __libc_use_alloca ((rear_ptr - w) * sizeof (CHAR_T)); > - if (__builtin_expect (use_alloca, true)) > - src = (CHAR_T *) alloca ((rear_ptr - w) * sizeof (CHAR_T)); > - else > - { > - src = (CHAR_T *) malloc ((rear_ptr - w) * sizeof (CHAR_T)); > - if (src == NULL) > - /* If we cannot allocate the memory don't rewrite the string. > - It is better than nothing. */ > - return w; > - } > + struct scratch_buffer buffer; > + scratch_buffer_init (&buffer); > + if (!scratch_buffer_set_array_size (&buffer, rear_ptr - w, sizeof (CHAR_T))) > + /* If we cannot allocate the memory don't rewrite the string. > + It is better than nothing. */ > + return w; > + src = buffer.data; > > CHAR_T *s = (CHAR_T *) __mempcpy (src, w, > (rear_ptr - w) * sizeof (CHAR_T)); > @@ -110,8 +107,6 @@ _i18n_number_rewrite (CHAR_T *w, CHAR_T *rear_ptr, CHAR_T *end) > } > } > > - if (! use_alloca) > - free (src); > - > + scratch_buffer_free (&buffer); > return w; > } >
diff --git a/stdio-common/_i18n_number.h b/stdio-common/_i18n_number.h index 080e814..13d5936 100644 --- a/stdio-common/_i18n_number.h +++ b/stdio-common/_i18n_number.h @@ -19,6 +19,7 @@ #include <stdbool.h> #include <wchar.h> #include <wctype.h> +#include <scratch_buffer.h> #include "../locale/outdigits.h" #include "../locale/outdigitswc.h" @@ -65,17 +66,13 @@ _i18n_number_rewrite (CHAR_T *w, CHAR_T *rear_ptr, CHAR_T *end) /* Copy existing string so that nothing gets overwritten. */ CHAR_T *src; - bool use_alloca = __libc_use_alloca ((rear_ptr - w) * sizeof (CHAR_T)); - if (__builtin_expect (use_alloca, true)) - src = (CHAR_T *) alloca ((rear_ptr - w) * sizeof (CHAR_T)); - else - { - src = (CHAR_T *) malloc ((rear_ptr - w) * sizeof (CHAR_T)); - if (src == NULL) - /* If we cannot allocate the memory don't rewrite the string. - It is better than nothing. */ - return w; - } + struct scratch_buffer buffer; + scratch_buffer_init (&buffer); + if (!scratch_buffer_set_array_size (&buffer, rear_ptr - w, sizeof (CHAR_T))) + /* If we cannot allocate the memory don't rewrite the string. + It is better than nothing. */ + return w; + src = buffer.data; CHAR_T *s = (CHAR_T *) __mempcpy (src, w, (rear_ptr - w) * sizeof (CHAR_T)); @@ -110,8 +107,6 @@ _i18n_number_rewrite (CHAR_T *w, CHAR_T *rear_ptr, CHAR_T *end) } } - if (! use_alloca) - free (src); - + scratch_buffer_free (&buffer); return w; }