Message ID | 20170619161833.6D6BC402AEC0E@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
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 > { >
On 06/21/2017 09:53 PM, Adhemerval Zanella wrote: > > > 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. Thanks, I pushed it with a small change: - sysdep_segment_values = - (const char **) - alloca (n_sysdep_segments * sizeof (const char *)); + sysdep_segment_values = calloc + (n_sysdep_segments, sizeof (const char *)); + if (sysdep_segment_values == NULL) + goto invalid; (The calloc return value check is new.) Florian
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 {