ports/151833: sysutils/kiconvtool: I don't know how to load the pair (UTF-8 -> _wctype)

daniele glimp at live.com
Sat Oct 30 16:00:27 UTC 2010


>Number:         151833
>Category:       ports
>Synopsis:       sysutils/kiconvtool: I don't know how to load the pair (UTF-8 -> _wctype)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Oct 30 16:00:26 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     daniele
>Release:        8.1-RELEASE #0
>Organization:
>Environment:
FreeBSD 8.1-RELEASE #0: Mon Jul 19 02:55:53 UTC 2010     root@:/usr/obj/usr/src/sys/GENERIC  i386

>Description:
As a standard user I could not succesfully execute 

'mount_msdosfs -L en_US.UTF-8 /dev/da0s1 local/mnt'

I installed kiconvtool and added the following lines to /etc/rc.conf 

kiconv_preload="YES"
kiconv_local_charsets="UTF-8"
kiconv_foreign_charsets="UTF-16BE UTF-8"

Even with this I could not execute the preceding command as a standard user.

Taking a look at the code I discovered that "mount_msdosfs -L en_US.UTF-8 /dev/da0s1 local/mnt" when starts up sets its locale to en_US.UTF-8 [1]. And this leads to loading also the pair (UTF-8,_wctype) [2]. So, apparently, if that pair is not loaded, standard users can not execute the preceding command.

At this point the problem that arises is that at command line I do not know how to specify the charset _wctype (unless this is not possible) and feed kiconvtool. 

To solve the problem, I then modified kiconvtool (explained below) so that the pair (UTF-8, _wctype) is loaded automatically.

d

[1] /usr/src/sbin/mount_msdosfs/mount_msdosfs.c    - Line 114
[2] /usr/src/lib/libkiconv/xlat16_iconv.c          - Line 123








>How-To-Repeat:

>Fix:
The workaround to solve this __specific__ problem was to apply the following patch and rebuild kiconvtool. 
Please *note* that this patch is not intended for general usage but just to give an idea of a base to further improve the port in case it is not possible to specify _wctype at command line (or to remove the requirement).

--- kiconvtool.c	2010-10-30 17:18:32.000000000 +0200
+++ kiconvtool.new	2010-10-30 17:18:32.000000000 +0200
@@ -35,6 +35,7 @@
 #include <sys/sysctl.h>
 #include <string.h>
 #include <memstat.h>
+#include <locale.h>
 
 enum arg_type_t_ {
 	ARGTYPE_LOCAL,
@@ -185,6 +186,7 @@
 		return 1;
 	}
 
+	setlocale(LC_CTYPE, "en_US.UTF-8");
 	enum arg_type_t_ arg_type = ARGTYPE_PAIR;
 	for (i = 1; i < argc; i++) {
 		if (argv[i][0] == '-') {


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list