This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] _i18n_number_rewrite: Use struct scratch_buffer
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Tue, 27 Jun 2017 17:34:13 -0300
- Subject: Re: [PATCH] _i18n_number_rewrite: Use struct scratch_buffer
- Authentication-results: sourceware.org; auth=none
- References: <20170619162236.49362402AEC3C@oldenburg.str.redhat.com>
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;
> }
>