summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbdrewery <bdrewery@FreeBSD.org>2016-02-02 23:33:58 +0000
committerbdrewery <bdrewery@FreeBSD.org>2016-02-02 23:33:58 +0000
commit27e083b53bbc58462060f9d7e7a041bf72ccd3a7 (patch)
tree4b6b70acd2ece49d47fdbb6b8b08a12d87f24e16
parent8d851d4e740abae7b12ae8a5ff7e3dc1daa32a29 (diff)
downloadFreeBSD-src-27e083b53bbc58462060f9d7e7a041bf72ccd3a7.zip
FreeBSD-src-27e083b53bbc58462060f9d7e7a041bf72ccd3a7.tar.gz
Move logic to destroy a struct catentry to its own function.
This will be used later for memory leak handling. Obtained from: OneFS Sponsored by: EMC / Isilon Storage Division
-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 0cba460..3df76b6 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;
}
}
OpenPOWER on IntegriCloud