summaryrefslogtreecommitdiff
path: root/intl
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-06-21 22:59:19 +0200
committerFlorian Weimer <fweimer@redhat.com>2017-06-21 22:59:19 +0200
commit0a47d031e44f15236bcef8aeba80e737bd013c6f (patch)
tree6f67723d831039ed091cf3601b30aae611c9c07f /intl
parent4dd8e7c0ce5ecc7f65e33e60ad2f717b31de32ec (diff)
downloadglibc-0a47d031e44f15236bcef8aeba80e737bd013c6f.tar.gz
_nl_load_domain: Use calloc instead of alloca
Diffstat (limited to 'intl')
-rw-r--r--intl/loadmsgcat.c45
1 files changed, 7 insertions, 38 deletions
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index 4dd75deee7..c2ff64e97f 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,10 @@ _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 *));
+ if (sysdep_segment_values == NULL)
+ goto invalid;
for (i = 0; i < n_sysdep_segments; i++)
{
const char *name =
@@ -995,7 +964,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 +1015,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 +1219,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
domain->trans_sysdep_tab = NULL;
}
- freea (sysdep_segment_values);
+ free (sysdep_segment_values);
}
else
{