svn commit: r257888 - in head: contrib/smbfs/lib/smb usr.sbin/mount_smbfs
Gleb Smirnoff
glebius at FreeBSD.org
Sat Nov 9 14:48:51 UTC 2013
Author: glebius
Date: Sat Nov 9 14:48:50 2013
New Revision: 257888
URL: http://svnweb.freebsd.org/changeset/base/257888
Log:
Use system libiconv, instead of trying to dlopen() it.
PR: 183153
Submitted by: Dominic Fandrey <kamikaze bsdforen.de>
Modified:
head/contrib/smbfs/lib/smb/nls.c
head/usr.sbin/mount_smbfs/Makefile
Modified: head/contrib/smbfs/lib/smb/nls.c
==============================================================================
--- head/contrib/smbfs/lib/smb/nls.c Sat Nov 9 14:46:24 2013 (r257887)
+++ head/contrib/smbfs/lib/smb/nls.c Sat Nov 9 14:48:50 2013 (r257888)
@@ -36,12 +36,9 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
-#include <sys/iconv.h>
+#include <iconv.h>
#include <sys/sysctl.h>
#include <ctype.h>
-#ifndef APPLE
-#include <dlfcn.h>
-#endif
#include <errno.h>
#include <stdio.h>
#include <string.h>
@@ -50,21 +47,10 @@ __FBSDID("$FreeBSD$");
#include <err.h>
#include <netsmb/smb_lib.h>
-/*
- * prototype iconv* functions
- */
-typedef void *iconv_t;
-
-static iconv_t (*my_iconv_open)(const char *, const char *);
-static size_t(*my_iconv)(iconv_t, const char **, size_t *, char **, size_t *);
-static int(*my_iconv_close)(iconv_t);
-
u_char nls_lower[256];
u_char nls_upper[256];
static iconv_t nls_toext, nls_toloc;
-static int iconv_loaded;
-static void *iconv_lib;
int
nls_setlocale(const char *name)
@@ -90,32 +76,18 @@ nls_setrecode(const char *local, const c
#else
iconv_t icd;
- if (iconv_loaded == 2)
- return ENOENT;
- else if (iconv_loaded == 0) {
- iconv_loaded++;
- iconv_lib = dlopen("libiconv.so", RTLD_LAZY | RTLD_GLOBAL);
- if (iconv_lib == NULL) {
- warn("Unable to load iconv library: %s\n", dlerror());
- iconv_loaded++;
- return ENOENT;
- }
- my_iconv_open = dlsym(iconv_lib, "iconv_open");
- my_iconv = dlsym(iconv_lib, "iconv");
- my_iconv_close = dlsym(iconv_lib, "iconv_close");
- }
if (nls_toext)
- my_iconv_close(nls_toext);
+ iconv_close(nls_toext);
if (nls_toloc)
- my_iconv_close(nls_toloc);
+ iconv_close(nls_toloc);
nls_toext = nls_toloc = (iconv_t)0;
- icd = my_iconv_open(external, local);
+ icd = iconv_open(external, local);
if (icd == (iconv_t)-1)
return errno;
nls_toext = icd;
- icd = my_iconv_open(local, external);
+ icd = iconv_open(local, external);
if (icd == (iconv_t)-1) {
- my_iconv_close(nls_toext);
+ iconv_close(nls_toext);
nls_toext = (iconv_t)0;
return errno;
}
@@ -130,14 +102,11 @@ nls_str_toloc(char *dst, const char *src
char *p = dst;
size_t inlen, outlen;
- if (!iconv_loaded)
- return strcpy(dst, src);
-
if (nls_toloc == (iconv_t)0)
return strcpy(dst, src);
inlen = outlen = strlen(src);
- my_iconv(nls_toloc, NULL, NULL, &p, &outlen);
- while (my_iconv(nls_toloc, &src, &inlen, &p, &outlen) == -1) {
+ iconv(nls_toloc, NULL, NULL, &p, &outlen);
+ while (iconv(nls_toloc, &src, &inlen, &p, &outlen) == -1) {
*p++ = *src++;
inlen--;
outlen--;
@@ -152,14 +121,11 @@ nls_str_toext(char *dst, const char *src
char *p = dst;
size_t inlen, outlen;
- if (!iconv_loaded)
- return strcpy(dst, src);
-
if (nls_toext == (iconv_t)0)
return strcpy(dst, src);
inlen = outlen = strlen(src);
- my_iconv(nls_toext, NULL, NULL, &p, &outlen);
- while (my_iconv(nls_toext, &src, &inlen, &p, &outlen) == -1) {
+ iconv(nls_toext, NULL, NULL, &p, &outlen);
+ while (iconv(nls_toext, &src, &inlen, &p, &outlen) == -1) {
*p++ = *src++;
inlen--;
outlen--;
@@ -175,17 +141,14 @@ nls_mem_toloc(void *dst, const void *src
const char *s = src;
size_t inlen, outlen;
- if (!iconv_loaded)
- return memcpy(dst, src, size);
-
if (size == 0)
return NULL;
if (nls_toloc == (iconv_t)0)
return memcpy(dst, src, size);
inlen = outlen = size;
- my_iconv(nls_toloc, NULL, NULL, &p, &outlen);
- while (my_iconv(nls_toloc, &s, &inlen, &p, &outlen) == -1) {
+ iconv(nls_toloc, NULL, NULL, &p, &outlen);
+ while (iconv(nls_toloc, &s, &inlen, &p, &outlen) == -1) {
*p++ = *s++;
inlen--;
outlen--;
@@ -203,12 +166,12 @@ nls_mem_toext(void *dst, const void *src
if (size == 0)
return NULL;
- if (!iconv_loaded || nls_toext == (iconv_t)0)
+ if (nls_toext == (iconv_t)0)
return memcpy(dst, src, size);
inlen = outlen = size;
- my_iconv(nls_toext, NULL, NULL, &p, &outlen);
- while (my_iconv(nls_toext, &s, &inlen, &p, &outlen) == -1) {
+ iconv(nls_toext, NULL, NULL, &p, &outlen);
+ while (iconv(nls_toext, &s, &inlen, &p, &outlen) == -1) {
*p++ = *s++;
inlen--;
outlen--;
Modified: head/usr.sbin/mount_smbfs/Makefile
==============================================================================
--- head/usr.sbin/mount_smbfs/Makefile Sat Nov 9 14:46:24 2013 (r257887)
+++ head/usr.sbin/mount_smbfs/Makefile Sat Nov 9 14:48:50 2013 (r257888)
@@ -11,11 +11,6 @@ CFLAGS+= -DSMBFS -I${MOUNTDIR} -I${CONTR
LDADD= -lsmb -lkiconv
DPADD= ${LIBSMB} ${LIBKICONV}
-# Needs to be dynamically linked for optional dlopen() access to
-# userland libiconv (see the -E option).
-#
-NO_SHARED?= NO
-
.PATH: ${CONTRIBDIR}/mount_smbfs
.PATH: ${MOUNTDIR}
More information about the svn-src-all
mailing list