aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/nls
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2016-02-02 23:33:58 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2016-02-02 23:33:58 +0000
commitb231dc0a9f0d95cccb585779b7eb1b357cb0ae53 (patch)
tree4b6b70acd2ece49d47fdbb6b8b08a12d87f24e16 /lib/libc/nls
parent0fd00e0caa889111fc31617db9cd9aa52e9c5eec (diff)
Notes
Diffstat (limited to 'lib/libc/nls')
-rw-r--r--lib/libc/nls/msgcat.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/lib/libc/nls/msgcat.c b/lib/libc/nls/msgcat.c
index 0cba460403b3a..3df76b60b4bda 100644
--- a/lib/libc/nls/msgcat.c
+++ b/lib/libc/nls/msgcat.c
@@ -325,6 +325,21 @@ notfound:
return ((char *)s);
}
+static void
+catfree(struct catentry *np)
+{
+
+ if (np->catd != NULL && np->catd != NLERR) {
+ munmap(np->catd->__data, (size_t)np->catd->__size);
+ free(np->catd);
+ }
+ SLIST_REMOVE(&cache, np, catentry, list);
+ free(np->name);
+ free(np->path);
+ free(np->lang);
+ free(np);
+}
+
int
catclose(nl_catd catd)
{
@@ -341,15 +356,8 @@ catclose(nl_catd catd)
SLIST_FOREACH(np, &cache, list) {
if (catd == np->catd) {
np->refcount--;
- if (np->refcount == 0) {
- munmap(catd->__data, (size_t)catd->__size);
- free(catd);
- SLIST_REMOVE(&cache, np, catentry, list);
- free(np->name);
- free(np->path);
- free(np->lang);
- free(np);
- }
+ if (np->refcount == 0)
+ catfree(np);
break;
}
}