summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2002-08-07 07:02:37 +0000
committerache <ache@FreeBSD.org>2002-08-07 07:02:37 +0000
commitfcb62c09162751be49f74a1d485c23b322a71f1d (patch)
treeaddee5985d5983aca258964b9c52d2d551894bef /lib/libc
parent376dbc34bab272fd9929de4c0997cc7e3aa9727e (diff)
downloadFreeBSD-src-fcb62c09162751be49f74a1d485c23b322a71f1d.zip
FreeBSD-src-fcb62c09162751be49f74a1d485c23b322a71f1d.tar.gz
Close descriptor, if error happens in loadCat()
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/nls/msgcat.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/libc/nls/msgcat.c b/lib/libc/nls/msgcat.c
index 570dd10..2b80d91 100644
--- a/lib/libc/nls/msgcat.c
+++ b/lib/libc/nls/msgcat.c
@@ -320,6 +320,7 @@ catclose(catd)
static char *_errowner = "Message Catalog System";
#define CORRUPT() { \
+ (void)fclose(cat->fp); \
(void)fprintf(stderr, "%s: corrupt file.", _errowner); \
free(cat); \
NLRETERR(EFTYPE); \
@@ -327,6 +328,7 @@ 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; \
@@ -379,12 +381,14 @@ loadCat(catpath)
CORRUPT();
if (header.majorVer != MCMajorVer) {
+ (void)fclose(cat->fp);
free(cat);
(void)fprintf(stderr, "%s: %s is version %ld, we need %ld.\n",
_errowner, catpath, header.majorVer, MCMajorVer);
NLRETERR(EFTYPE);
}
if (header.numSets <= 0) {
+ (void)fclose(cat->fp);
free(cat);
(void)fprintf(stderr, "%s: %s has %ld sets!\n",
_errowner, catpath, header.numSets);
@@ -421,7 +425,9 @@ loadCat(catpath)
int res;
if ((res = loadSet(cat, set)) <= 0) {
+ saverr = errno;
__nls_free_resources(cat, i);
+ errno = saverr;
if (res < 0)
NOSPACE();
CORRUPT();
OpenPOWER on IntegriCloud