Always set errno to ENOMEM after malloc failed (as workaround).

Our malloc sometimes forget to set errno, f.e. for size overflow case.
This commit is contained in:
Andrey A. Chernov 2002-08-07 22:03:46 +00:00
parent 57473ad215
commit cb9772d882
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=101490

View File

@ -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);
}