No space calculation in wcstombs?

Corinna Vinschen
Tue Oct 23 14:31:00 GMT 2007

[Redirected to the newlib mailing list]

On Oct 23 11:52, Christoph Ender wrote:
> Hi all,
> when converting wchar_t*- to (mb)char*-Strings I've been
> so far using the wcstombs function in two steps: One call
> to length=wcstombs(NULL, *src, 0) in order to make the
> function return the space required for the dest string
> and one call wo wcstombs(*dest, *src, length) to actually
> convert the src string after allocating (length) bytes.
> I've just noticed that the first step does not work with
> cygwin and  I've attached a small example to demonstrate
> the problem. On a Linux- and Mac OS X-machine the return
> value is 26, on cygwin 0. Since wcstombs is supposed to be
> affected by the current locale setting I've set the locale
> to "C", but the result is still the same: cygwin always
> tries to do the actual converion (if the len parameter is
> not 0 there is a segfault) instead of measuring the space
> requirements.
> ----------8<----------8<----------8<----------8<----------
> #include <stdio.h>
> #include <wchar.h>
> #include <locale.h>
> int main(int argc, char *argv[])
> {
>   int result;
>   wchar_t s[] = L"abcdefghijklmnopqrstuvwxyz";
>   printf("Locale: %s\n", setlocale(LC_ALL, "C"));
>   result = wcstombs(NULL, s, 0);
>   printf("Required space: %d.\n", result);
>   return 0;
> }
> ----------8<----------8<----------8<----------8<----------
> What am I doing wrong here? Or is this actually a cygwin
> problem?

No, it's a newlib problem.  The wide character support in newlib
is somewhat rudimentary.  The reason is that newlib is mainly
targeting embedded systems which don't need full wchar support.

However, as this is an open source project, patches are always


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

More information about the Newlib mailing list