This is the mail archive of the cygwin 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]

cygwin_conv_ functions and character encoding

The cygwin path conversion functions ignore the current locale;
rather they seem to always use the locale environment set when the program was started, see test program convloc.c:

#include <locale.h>
#include <stdio.h>
#include <sys/cygwin.h>
#include <stdlib.h>
int main() {
  setlocale(LC_ALL, "C.UTF-8");
  char * utfstring = "bÃh";
  printf("ustring <%s>\n", utfstring);
  wchar_t * wstring = cygwin_create_path(CCP_POSIX_TO_WIN_W, utfstring);
  printf("wstring <%ls>\n", wstring);

Run in a UTF-8 terminal:
> LC_CTYPE=de_DE ./convloc
ustring (C.UTF-8) <bÃh>
wstring (C.UTF-8) <D:\TEMP\bÃÂh>

In sys_wcstombs in I see:
  const char *charset = cygheap->locale.charset;
which is set in internal_setlocale ()...

In fact, the situation can be fixed by adding after setlocale():
  cygwin_internal(CW_INT_SETLOCALE);  // -> internal_setlocale();
but I think those functions should use the proper locale implicitly; according to the generic description in, LC_CTYPE affects ... conversion ... functions, in my opinion this would include cygwin-specific conversion functions as well as implicitly called conversion (see open() below).
The same problem applies to the open() function (involving path conversion).
The wide string function mbstowcs behaves as expected.

The whole issue occurred to me while trying to work around a missing conversion functionality, just converting the pathname syntax between Unicode strings. The desired options would be like: CCP_POSIX_W_TO_WIN_W, /* from is wchar_t *posix, to is wchar_t *win32 */ CCP_WIN_W_TO_POSIX_W, /* from is wchar_t *win32, to is wchar_t *posix */


Problem reports:
Unsubscribe info:

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