diff options
author | Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com> | 2016-05-25 10:04:06 -0300 |
---|---|---|
committer | Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com> | 2016-05-25 10:04:06 -0300 |
commit | 2feb372c585eb77141adbff24d4958e5a5e6678a (patch) | |
tree | 79416b255a6e61e6fdbc913da3be86d87a8a25ff /catgets/catgets.c | |
parent | c69c361ca6bf95f8c665884ee863168a321d472a (diff) | |
parent | 916ef0f69613613e11123657bff127bd26104630 (diff) | |
download | glibc-ibm/2.20/master.zip glibc-ibm/2.20/master.tar.gz glibc-ibm/2.20/master.tar.bz2 |
Merge release/2.20/master into ibm/2.20/masteribm/2.20/master
Conflicts:
NEWS
Diffstat (limited to 'catgets/catgets.c')
-rw-r--r-- | catgets/catgets.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/catgets/catgets.c b/catgets/catgets.c index eac2827..820c0f6 100644 --- a/catgets/catgets.c +++ b/catgets/catgets.c @@ -16,7 +16,6 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include <alloca.h> #include <errno.h> #include <locale.h> #include <nl_types.h> @@ -35,6 +34,7 @@ catopen (const char *cat_name, int flag) __nl_catd result; const char *env_var = NULL; const char *nlspath = NULL; + char *tmp = NULL; if (strchr (cat_name, '/') == NULL) { @@ -54,7 +54,10 @@ catopen (const char *cat_name, int flag) { /* Append the system dependent directory. */ size_t len = strlen (nlspath) + 1 + sizeof NLSPATH; - char *tmp = alloca (len); + tmp = malloc (len); + + if (__glibc_unlikely (tmp == NULL)) + return (nl_catd) -1; __stpcpy (__stpcpy (__stpcpy (tmp, nlspath), ":"), NLSPATH); nlspath = tmp; @@ -65,16 +68,18 @@ catopen (const char *cat_name, int flag) result = (__nl_catd) malloc (sizeof (*result)); if (result == NULL) - /* We cannot get enough memory. */ - return (nl_catd) -1; - - if (__open_catalog (cat_name, nlspath, env_var, result) != 0) + { + /* We cannot get enough memory. */ + result = (nl_catd) -1; + } + else if (__open_catalog (cat_name, nlspath, env_var, result) != 0) { /* Couldn't open the file. */ free ((void *) result); - return (nl_catd) -1; + result = (nl_catd) -1; } + free (tmp); return (nl_catd) result; } |