summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2002-08-07 22:03:46 +0000
committerache <ache@FreeBSD.org>2002-08-07 22:03:46 +0000
commit99fbabc1a4ccb3c4cb7bfbe407a54e6ac05f163f (patch)
tree451139d47f9e405ab9f0e207e43acc4f3268e25b /lib
parentf158c10436c358bac41e5759a511e11ec18847d7 (diff)
downloadFreeBSD-src-99fbabc1a4ccb3c4cb7bfbe407a54e6ac05f163f.zip
FreeBSD-src-99fbabc1a4ccb3c4cb7bfbe407a54e6ac05f163f.tar.gz
Always set errno to ENOMEM after malloc failed (as workaround).
Our malloc sometimes forget to set errno, f.e. for size overflow case.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/nls/msgcat.c16
1 files 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);
}
OpenPOWER on IntegriCloud