From 99fbabc1a4ccb3c4cb7bfbe407a54e6ac05f163f Mon Sep 17 00:00:00 2001 From: ache Date: Wed, 7 Aug 2002 22:03:46 +0000 Subject: Always set errno to ENOMEM after malloc failed (as workaround). Our malloc sometimes forget to set errno, f.e. for size overflow case. --- lib/libc/nls/msgcat.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/libc/nls/msgcat.c b/lib/libc/nls/msgcat.c index 2b80d91..122cb9c 100644 --- a/lib/libc/nls/msgcat.c +++ b/lib/libc/nls/msgcat.c @@ -327,11 +327,10 @@ static char *_errowner = "Message Catalog System"; } #define NOSPACE() { \ - saverr = errno; \ (void)fclose(cat->fp); \ (void)fprintf(stderr, "%s: no more memory.", _errowner); \ free(cat); \ - errno = saverr; \ + errno = ENOMEM; \ return (NLERR); \ } @@ -364,8 +363,10 @@ loadCat(catpath) off_t nextSet; int saverr; - if ((cat = (MCCatT *)malloc(sizeof(MCCatT))) == NULL) + if ((cat = (MCCatT *)malloc(sizeof(MCCatT))) == NULL) { + errno = ENOMEM; return (NLERR); + } cat->loadType = MCLoadBySet; if ((cat->fp = fopen(catpath, "r")) == NULL) { @@ -425,9 +426,7 @@ loadCat(catpath) int res; if ((res = loadSet(cat, set)) <= 0) { - saverr = errno; __nls_free_resources(cat, i); - errno = saverr; if (res < 0) NOSPACE(); CORRUPT(); @@ -458,8 +457,10 @@ loadSet(cat, set) /* Get the data */ if (fseeko(cat->fp, set->data.off, SEEK_SET) == -1) return (0); - if ((set->data.str = malloc(set->dataLen)) == NULL) + if ((set->data.str = malloc(set->dataLen)) == NULL) { + errno = ENOMEM; return (-1); + } if (fread(set->data.str, set->dataLen, 1, cat->fp) != 1) { saverr = errno; free(set->data.str); @@ -476,9 +477,8 @@ loadSet(cat, set) } if ((set->u.msgs = (MCMsgT *)malloc(sizeof(MCMsgT) * set->numMsgs)) == NULL) { - saverr = errno; free(set->data.str); - errno = saverr; + errno = ENOMEM; return (-1); } -- cgit v1.1