Subject: Re: UTF-8 file names?
To: None <tech-userlevel@netbsd.org>
From: Christos Zoulas <christos@zoulas.com>
List: tech-userlevel
Date: 09/25/2004 15:23:37
In article <20040925122646.GG4436@dmath5.geometrie.tuwien.ac.at>,
Thomas Klausner <wiz@NetBSD.org> wrote:
>On Tue, Sep 14, 2004 at 09:00:49PM +0900, SODA Noriyuki wrote:
>> >>>>> On Tue, 14 Sep 2004 13:43:37 +0200,
>> 	Thomas Klausner <wiz@NetBSD.org> said:
>>
>> >> ls has a problem, because it is using isprint(3) instead of iswprint(3).
>> >> You can work around the problem by using something like "ls | cat",
>> >> though.
>>
>> > Should it be changed to use iswprint(3)?
>>
>> Yes.
>> (To be sure, you cannot just use iswprint() as a substitute for
>>  isprint(). It's need be written by using wchar_t. It's somewhat
>>  easy change, though.)
>
>The file name comes from fts(3). The structure there has:
>     typedef struct _ftsent {
>             u_short fts_info;               /* flags for FTSENT structure */
>             char *fts_accpath;              /* access path */
>             char *fts_path;                 /* root path */
>             short fts_pathlen;              /* strlen(fts_path) */
>             char *fts_name;                 /* file name */
>             short fts_namelen;              /* strlen(fts_name) */
>             short fts_level;                /* depth (-1 to N) */
>             int fts_errno;                  /* file errno */
>             long fts_number;                /* local numeric value */
>             void *fts_pointer;              /* local address value */
>             struct ftsent *fts_parent;      /* parent directory */
>             struct ftsent *fts_link;        /* next file structure */
>             struct ftsent *fts_cycle;       /* cycle structure */
>             struct stat *fts_statp;         /* stat(2) information */
>     } FTSENT;
>
>We're using fts_name, which is a char *.
>How can I convert it to wchar_t *?

size_t
mbsrtowcs(wchar_t * restrict pwcs, const char ** restrict s, size_t n,
    mbstate_t * restrict ps);

???

christos