aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTijl Coosemans <tijl@FreeBSD.org>2014-06-13 08:36:10 +0000
committerTijl Coosemans <tijl@FreeBSD.org>2014-06-13 08:36:10 +0000
commitcdd0ebc93b1bcc2e6b8d9a96faa113bc42a1c06c (patch)
treef43cd6d873b5cf66f8c5c549d3ad62f2be5b5bbe /lib
parent3fc3c30a2774cda5922eafb418d67093afa0687d (diff)
downloadsrc-cdd0ebc93b1bcc2e6b8d9a96faa113bc42a1c06c.tar.gz
src-cdd0ebc93b1bcc2e6b8d9a96faa113bc42a1c06c.zip
iconv_open: initialise ci_ilseq_invalid field of _citrus_iconv_shared
struct after allocation with malloc. iconvlist: reduce a memory leak by copying strings only once.
Notes
Notes: svn path=/head/; revision=267438
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/iconv/bsd_iconv.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/libc/iconv/bsd_iconv.c b/lib/libc/iconv/bsd_iconv.c
index 40a1a4e88909..f764886d7851 100644
--- a/lib/libc/iconv/bsd_iconv.c
+++ b/lib/libc/iconv/bsd_iconv.c
@@ -83,6 +83,7 @@ __bsd___iconv_open(const char *out, const char *in, struct _citrus_iconv *handle
}
handle->cv_shared->ci_discard_ilseq = strcasestr(out, "//IGNORE");
+ handle->cv_shared->ci_ilseq_invalid = false;
handle->cv_shared->ci_hooks = NULL;
return ((iconv_t)(void *)handle);
@@ -223,7 +224,7 @@ __bsd_iconvlist(int (*do_one) (unsigned int, const char * const *,
return;
}
strlcpy(curkey, list[i], slashpos - list[i] + 1);
- names[j++] = strdup(curkey);
+ names[j++] = curkey;
for (; (i < sz) && (memcmp(curkey, list[i], strlen(curkey)) == 0); i++) {
slashpos = strchr(list[i], '/');
curitem = (char *)malloc(strlen(slashpos) + 1);
@@ -235,7 +236,7 @@ __bsd_iconvlist(int (*do_one) (unsigned int, const char * const *,
if (strcmp(curkey, curitem) == 0) {
continue;
}
- names[j++] = strdup(curitem);
+ names[j++] = curitem;
}
np = (const char * const *)names;
do_one(j, np, data);