From jbeich@tormail.net  Fri Nov 18 23:45:11 2011
Return-Path: <jbeich@tormail.net>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 4C4CF106564A
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 18 Nov 2011 23:45:11 +0000 (UTC)
	(envelope-from jbeich@tormail.net)
Received: from server2.hudsonvalleyhost.com (server2.hudsonvalleyhost.com [66.7.195.77])
	by mx1.freebsd.org (Postfix) with ESMTP id 093FD8FC12
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 18 Nov 2011 23:45:10 +0000 (UTC)
Received: from bolobolo.torservers.net ([173.254.192.35]:52460 helo=internal.tormail.net)
	by server2.hudsonvalleyhost.com with esmtpsa (TLSv1:RC4-SHA:128)
	(Exim 4.69)
	(envelope-from <jbeich@tormail.net>)
	id 1RRY7J-00017H-Ja
	for FreeBSD-gnats-submit@freebsd.org; Fri, 18 Nov 2011 18:45:10 -0500
Received: from jbeich by internal.tormail.net with local (Exim 4.63)
	(envelope-from <jbeich@tormail.net>)
	id 1RRY6g-000PQS-5I
	for FreeBSD-gnats-submit@freebsd.org; Fri, 18 Nov 2011 23:44:32 +0000
Message-Id: <1RRY6g-000PQS-5I@internal.tormail.net>
Date: Fri, 18 Nov 2011 16:44:16 -0700
From: Jan Beich <jbeich@tormail.net>
To: FreeBSD-gnats-submit@freebsd.org
Subject: [patch] libkiconv doesn't work with iconv() in libc

>Number:         162670
>Category:       bin
>Synopsis:       [patch] libkiconv doesn't work with iconv() in libc
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    gabor
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 18 23:50:06 UTC 2011
>Closed-Date:    Thu Jun 28 09:21:11 UTC 2012
>Last-Modified:  Thu Jun 28 09:21:11 UTC 2012
>Originator:     Jan Beich
>Release:        FreeBSD 10.0-CURRENT r227674M amd64
>Organization:
>Environment:
LANG=en_US.UTF-8
GNU libiconv is not installed, i.e. ports/161417
>Description:
>How-To-Repeat:
1. install world WITH_ICONV=
2. try to mount anything with unicode locale

   $ cdev=$(mdconfig -s 50m); newfs_msdos $cdev
   $ mount_msdosfs -L en_US.UTF-8 /dev/$cdev /media
   mount_msdosfs: Unable to load iconv library: Shared object "libiconv.so" not found, required by "mount_msdosfs"
   : No error: 0
   mount_msdosfs: msdosfs_iconv: No such file or directory
   Exit 71
   $ ln -s /lib/libc.so.7 /usr/lib/libiconv.so
   $ mount_msdosfs -L en_US.UTF-8 /dev/$cdev /media
   Exit 139

>Fix:
--- no_dlopen.diff begins here ---
Index: lib/libkiconv/Makefile
===================================================================
--- lib/libkiconv/Makefile	(revision 227674)
+++ lib/libkiconv/Makefile	(working copy)
@@ -17,4 +17,8 @@ CFLAGS+=	-I${.CURDIR}/../../sys
 
 WARNS?=		1
 
+.ifndef WITH_ICONV
+CFLAGS+=	-DICONV_DLOPEN
+.endif
+
 .include <bsd.lib.mk>
Index: lib/libkiconv/xlat16_iconv.c
===================================================================
--- lib/libkiconv/xlat16_iconv.c	(revision 227674)
+++ lib/libkiconv/xlat16_iconv.c	(working copy)
@@ -60,10 +60,18 @@ struct xlat16_table {
 static struct xlat16_table kiconv_xlat16_open(const char *, const char *, int);
 static int chklocale(int, const char *);
 
+#ifdef ICONV_DLOPEN
 static int my_iconv_init(void);
 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);
+#else
+#include <iconv.h>
+#define my_iconv_init() 0
+#define my_iconv_open iconv_open
+#define my_iconv iconv
+#define my_iconv_close iconv_close
+#endif
 static size_t my_iconv_char(iconv_t, const u_char **, size_t *, u_char **, size_t *);
 
 int
@@ -310,6 +318,7 @@ chklocale(int category, const char *code)
 	return (error);
 }
 
+#ifdef ICONV_DLOPEN
 static int
 my_iconv_init(void)
 {
@@ -327,6 +336,7 @@ my_iconv_init(void)
 
 	return (0);
 }
+#endif
 
 static size_t
 my_iconv_char(iconv_t cd, const u_char **ibuf, size_t * ilen, u_char **obuf,
--- no_dlopen.diff ends here ---
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->gabor 
Responsible-Changed-By: gabor 
Responsible-Changed-When: Sun Nov 20 23:45:12 UTC 2011 
Responsible-Changed-Why:  
Take. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=162670 
State-Changed-From-To: open->patched 
State-Changed-By: gabor 
State-Changed-When: Fri May 25 22:08:08 UTC 2012 
State-Changed-Why:  
Committed to HEAD, thanks! 
Keep this PR as MFC reminder. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=162670 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/162670: commit references a PR
Date: Fri, 25 May 2012 22:07:25 +0000 (UTC)

 Author: gabor
 Date: Fri May 25 22:07:13 2012
 New Revision: 236028
 URL: http://svn.freebsd.org/changeset/base/236028
 
 Log:
   - Add support for BSD iconv when it is build into libc
   
   PR:		bin/162670
   Submitted by:	Jan Beich <jbeich@tormail.net>
   MFC after:	2 weeks
 
 Modified:
   head/lib/libkiconv/Makefile
   head/lib/libkiconv/xlat16_iconv.c
 
 Modified: head/lib/libkiconv/Makefile
 ==============================================================================
 --- head/lib/libkiconv/Makefile	Fri May 25 21:52:57 2012	(r236027)
 +++ head/lib/libkiconv/Makefile	Fri May 25 22:07:13 2012	(r236028)
 @@ -17,4 +17,8 @@ CFLAGS+=	-I${.CURDIR}/../../sys
  
  WARNS?=		1
  
 +.if !defined(MK_ICONV)
 +CFLAGS+=	-DICONV_DLOPEN
 +.endif
 +
  .include <bsd.lib.mk>
 
 Modified: head/lib/libkiconv/xlat16_iconv.c
 ==============================================================================
 --- head/lib/libkiconv/xlat16_iconv.c	Fri May 25 21:52:57 2012	(r236027)
 +++ head/lib/libkiconv/xlat16_iconv.c	Fri May 25 22:07:13 2012	(r236028)
 @@ -60,10 +60,18 @@ struct xlat16_table {
  static struct xlat16_table kiconv_xlat16_open(const char *, const char *, int);
  static int chklocale(int, const char *);
  
 +#ifdef ICONV_DLOPEN
  static int my_iconv_init(void);
  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);
 +#else
 +#include <iconv.h>
 +#define my_iconv_init() 0
 +#define my_iconv_open iconv_open
 +#define my_iconv iconv
 +#define my_iconv_close iconv_close
 +#endif
  static size_t my_iconv_char(iconv_t, const u_char **, size_t *, u_char **, size_t *);
  
  int
 @@ -310,6 +318,7 @@ chklocale(int category, const char *code
  	return (error);
  }
  
 +#ifdef ICONV_DLOPEN
  static int
  my_iconv_init(void)
  {
 @@ -327,6 +336,7 @@ my_iconv_init(void)
  
  	return (0);
  }
 +#endif
  
  static size_t
  my_iconv_char(iconv_t cd, const u_char **ibuf, size_t * ilen, u_char **obuf,
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: gabor 
State-Changed-When: Thu Jun 28 09:20:03 UTC 2012 
State-Changed-Why:  
Merged to 9.X, thanks. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=162670 
>Unformatted:
