diff options
author | ache <ache@FreeBSD.org> | 2002-08-07 07:02:37 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2002-08-07 07:02:37 +0000 |
commit | fcb62c09162751be49f74a1d485c23b322a71f1d (patch) | |
tree | addee5985d5983aca258964b9c52d2d551894bef /lib/libc/nls | |
parent | 376dbc34bab272fd9929de4c0997cc7e3aa9727e (diff) | |
download | FreeBSD-src-fcb62c09162751be49f74a1d485c23b322a71f1d.zip FreeBSD-src-fcb62c09162751be49f74a1d485c23b322a71f1d.tar.gz |
Close descriptor, if error happens in loadCat()
Diffstat (limited to 'lib/libc/nls')
-rw-r--r-- | lib/libc/nls/msgcat.c | 6 |
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(); |