Package: tree
Version: 1.5.2.1-1
Severity: normal
Tags: patch l10n

It seems that the current locale is not taken into account when displaying
file names:

% mkdir tmp
% touch tmp/eeeéee
% tree tmp
tmp
`-- eee\303\251ee

0 directories, 1 file

By examining the sources, my understanding is that setlocale(LC_CTYPE,
"") should be called *before* examining MB_CUR_MAX, otherwise it will
return 1 because the locale is set to "C" by default, as indicated
by setlocale(3):

"(...)
On  startup of the main program, the portable "C" locale is selected as
default.  A program may be made portable to all locales by calling:

    setlocale(LC_ALL, "");
(...)"

The attached patch works for me:

% ./tree tmp
tmp
`-- eeeéee

0 directories, 1 file

Best regards,

-Christian

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 
'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.26.5-mooch.1-amd64 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_US.UTF8)
Shell: /bin/sh linked to /bin/bash

Versions of packages tree depends on:
ii  libc6                         2.7-15     GNU C Library: Shared libraries

tree recommends no packages.

tree suggests no packages.

-- no debconf information
--- tree.c.orig	2008-11-01 19:18:07.000000000 +0100
+++ tree.c	2008-11-01 19:18:56.264797154 +0100
@@ -209,6 +209,8 @@
   dirs[0] = 0;
   Level = -1;
 
+  setlocale(LC_CTYPE, "");
+
 /* Until I get rid of this hack, make it linux/cygwin only: */
 #if defined (LINUX) || defined (CYGWIN)
   mb_cur_max = (int)MB_CUR_MAX;
@@ -216,8 +218,6 @@
   mb_cur_max = 1;
 #endif
 
-  setlocale(LC_CTYPE, "");
-
   memset(utable,0,sizeof(utable));
   memset(gtable,0,sizeof(gtable));
   memset(itable,0,sizeof(itable));

Reply via email to