svn commit: r250981 - head/lib/libc/iconv
Ed Schouten
ed at FreeBSD.org
Sat May 25 12:13:55 UTC 2013
Author: ed
Date: Sat May 25 12:13:54 2013
New Revision: 250981
URL: http://svnweb.freebsd.org/changeset/base/250981
Log:
Make some tiny improvements to iconv_open().
- Remove an unneeded variable.
- Fix whitespace bugs.
- Fix typoes in comment.
- Improve string handling a bit. Don't handroll strstr() and don't
terminate a strdup()'ed string. Instead, simply strndup() the part we
need.
Modified:
head/lib/libc/iconv/iconv.c
Modified: head/lib/libc/iconv/iconv.c
==============================================================================
--- head/lib/libc/iconv/iconv.c Sat May 25 12:11:20 2013 (r250980)
+++ head/lib/libc/iconv/iconv.c Sat May 25 12:13:54 2013 (r250981)
@@ -66,37 +66,31 @@ iconv_t _iconv_open(const char *out, c
struct _citrus_iconv *prealloc);
iconv_t
-_iconv_open(const char *out, const char *in, struct _citrus_iconv *prealloc)
+_iconv_open(const char *out, const char *in, struct _citrus_iconv *handle)
{
- struct _citrus_iconv *handle;
- char *out_truncated, *p;
+ const char *out_slashes;
+ char *out_noslashes;
int ret;
- handle = prealloc;
-
/*
* Remove anything following a //, as these are options (like
* //ignore, //translate, etc) and we just don't handle them.
- * This is for compatibilty with software that uses thees
+ * This is for compatibility with software that uses these
* blindly.
*/
- out_truncated = strdup(out);
- if (out_truncated == NULL) {
- errno = ENOMEM;
- return ((iconv_t)-1);
+ out_slashes = strstr(out, "//");
+ if (out_slashes != NULL) {
+ out_noslashes = strndup(out, out_slashes - out);
+ if (out_noslashes == NULL) {
+ errno = ENOMEM;
+ return ((iconv_t)-1);
+ }
+ ret = _citrus_iconv_open(&handle, in, out_noslashes);
+ free(out_noslashes);
+ } else {
+ ret = _citrus_iconv_open(&handle, in, out);
}
- p = out_truncated;
- while (*p != 0) {
- if (p[0] == '/' && p[1] == '/') {
- *p = '\0';
- break;
- }
- p++;
- }
-
- ret = _citrus_iconv_open(&handle, in, out_truncated);
- free(out_truncated);
if (ret) {
errno = ret == ENOENT ? EINVAL : ret;
return ((iconv_t)-1);
More information about the svn-src-all
mailing list