diff options
author | ache <ache@FreeBSD.org> | 2002-08-07 22:03:46 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2002-08-07 22:03:46 +0000 |
commit | 99fbabc1a4ccb3c4cb7bfbe407a54e6ac05f163f (patch) | |
tree | 451139d47f9e405ab9f0e207e43acc4f3268e25b /lib/libc | |
parent | f158c10436c358bac41e5759a511e11ec18847d7 (diff) | |
download | FreeBSD-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/libc')
-rw-r--r-- | lib/libc/nls/msgcat.c | 16 |
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); } |