This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: UTF8 support in Cygwin


> > My question is, does anyone have any objections to doing things this
way,
> > and if so, can they suggest a better way? I don't want to patch the
whole of
> > Cygwin and then have to re-write everything at a later date.
>
> I'd like to propose supporting other codepages than UTF8 and
> making it connected with other portions than filenames.
>
> For example, in case of CYGWIN=codepage:20866, suppose
> the `parse_options' set current_codepage = other_cp and
> current_cpnum = (UINT)20866.
> Your example would become as follows.
>
>   if (current_codepage == other_cp)
>     {
>       WCHAR wbuf[MAX_PATH];
>       if (MultiByteToWideChar (current_cpnum, 0, get_win32_name(), -1,
>                                wbuf, MAX_PATH) == 0)
>         {
>           __seterrno ();
>           goto done;
>         }
>       x = CreateFileW (wbuf, access, shared, &sa, creation_distribution,
>                        file_attributes, 0);
>     }
>   else
>     x = CreateFileA (get_win32_name (), access, shared, &sa,
creation_distribution,
>       file_attributes, 0);
>
> Moreover, get_cp in miscfunc.cc would have to become as follows.
>
>     UINT
>     get_cp ()
>     {
>       switch (current_codepage)
>         {
>         case ansi_cp:
>           return GetACP();
>         case oem_cp:
>           return GetOEMCP();
>         case other_cp:
>           return current_cpnum;
>         }
>     }
>
> When we want to use UTF8, we set codepage:65001 or codepage:utf8.
> The latter case needs for the parser to accept "utf8" and
> translate it to CP_UTF8 (65001).
>
> How about this idea?
This sounds like a good idea - I will have a go at implementing this.

Chris




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]