This is the mail archive of the newlib@sourceware.org mailing list for the newlib 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: [BUG] wprintf(L"%s", str) expects str to be wide


Corinna:
Are we looking at the same place? Lines 1200-1217 of libc/stdio/vfwprintf.c version 1.10 are what I looked at. I only see wide functions there. I'll quote from line 1199 to get the #endif:
#endif /* _MB_CAPABLE */
if (prec >= 0) {
/*
* can't use wcslen; can only look for the
* NUL in the first `prec' characters, and
* strlen () will go further.
*/
wchar_t *p = wmemchr (cp, L'\0', prec);


                                if (p != NULL) {
                                        size = p - cp;
                                        if (size > prec)
                                                size = prec;
                                } else
                                        size = prec;
                        } else
                                size = wcslen (cp);

                        break;
Craig

On 01/11/2013 10:07 AM, Corinna Vinschen wrote:
On Jan 11 09:52, Craig Howland wrote:
Corinna:
     It appears, taking a quick glance at the source, that the string
is only treated as regular characters if _MB_CAPABLE is
defined--otherwise it falls into a wide-character-only case.  This
could perhaps explain the differing results.
                 Craig
The _MB_CAPABLE code only handles the case which converts wide chars
into multibyte chars.  The default code right after the #endif handles
the incoming string as plain byte string.


Corinna




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