This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] _nl_load_domain: Use calloc instead of alloca



On 19/06/2017 13:18, Florian Weimer wrote:
> 2017-06-19  Florian Weimer  <fweimer@redhat.com>
> 
> 	* intl/loadmsgcat.c: Remove alloca support.
> 	(_nl_load_domain): Use calloc instead of alloca.

LGTM, thanks.

> 
> diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
> index 4dd75de..049fc88 100644
> --- a/intl/loadmsgcat.c
> +++ b/intl/loadmsgcat.c
> @@ -32,29 +32,6 @@
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  
> -#ifdef __GNUC__
> -# undef  alloca
> -# define alloca __builtin_alloca
> -# define HAVE_ALLOCA 1
> -#else
> -# ifdef _MSC_VER
> -#  include <malloc.h>
> -#  define alloca _alloca
> -# else
> -#  if defined HAVE_ALLOCA_H || defined _LIBC
> -#   include <alloca.h>
> -#  else
> -#   ifdef _AIX
> - #pragma alloca
> -#   else
> -#    ifndef alloca
> -char *alloca ();
> -#    endif
> -#   endif
> -#  endif
> -# endif
> -#endif
> -
>  #include <stdlib.h>
>  #include <string.h>
>  
> @@ -476,15 +453,6 @@ char *alloca ();
>  # define munmap(addr, len)	__munmap (addr, len)
>  #endif
>  
> -/* For those losing systems which don't have `alloca' we have to add
> -   some additional code emulating it.  */
> -#ifdef HAVE_ALLOCA
> -# define freea(p) /* nothing */
> -#else
> -# define alloca(n) malloc (n)
> -# define freea(p) free (p)
> -#endif
> -
>  /* For systems that distinguish between text and binary I/O.
>     O_BINARY is usually declared in <fcntl.h>. */
>  #if !defined O_BINARY && defined _O_BINARY
> @@ -982,9 +950,8 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
>  		sysdep_segments = (const struct sysdep_segment *)
>  		  ((char *) data
>  		   + W (domain->must_swap, data->sysdep_segments_offset));
> -		sysdep_segment_values =
> -		  (const char **)
> -		  alloca (n_sysdep_segments * sizeof (const char *));
> +		sysdep_segment_values = calloc
> +		  (n_sysdep_segments, sizeof (const char *));
>  		for (i = 0; i < n_sysdep_segments; i++)
>  		  {
>  		    const char *name =
> @@ -995,7 +962,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
>  
>  		    if (!(namelen > 0 && name[namelen - 1] == '\0'))
>  		      {
> -			freea (sysdep_segment_values);
> +			free (sysdep_segment_values);
>  			goto invalid;
>  		      }
>  
> @@ -1046,7 +1013,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
>  			      if (sysdepref >= n_sysdep_segments)
>  				{
>  				  /* Invalid.  */
> -				  freea (sysdep_segment_values);
> +				  free (sysdep_segment_values);
>  				  goto invalid;
>  				}
>  
> @@ -1250,7 +1217,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
>  		    domain->trans_sysdep_tab = NULL;
>  		  }
>  
> -		freea (sysdep_segment_values);
> +		free (sysdep_segment_values);
>  	      }
>  	    else
>  	      {
> 


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