diff options
author | tijl <tijl@FreeBSD.org> | 2014-06-13 08:36:10 +0000 |
---|---|---|
committer | tijl <tijl@FreeBSD.org> | 2014-06-13 08:36:10 +0000 |
commit | 523c8fffb3d427506590236dd26aea6d9b40939a (patch) | |
tree | f43cd6d873b5cf66f8c5c549d3ad62f2be5b5bbe /lib | |
parent | a6dbe6fa0d222e788f79958a3a27a057333388e6 (diff) | |
download | FreeBSD-src-523c8fffb3d427506590236dd26aea6d9b40939a.zip FreeBSD-src-523c8fffb3d427506590236dd26aea6d9b40939a.tar.gz |
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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/iconv/bsd_iconv.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/libc/iconv/bsd_iconv.c b/lib/libc/iconv/bsd_iconv.c index 40a1a4e..f764886 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); |