size_t PDC_mbstowcs(wchar_t *dest, const char *src, size_t n) { # ifdef PDC_FORCE_UTF8 size_t i = 0, len; if (!src || !dest) return 0; len = strlen(src); while (*src && i < n) { int retval = PDC_mbtowc(dest + i, src, len); if (retval < 1) return -1; src += retval; len -= retval; i++; } # else size_t i = mbstowcs(dest, src, n); # endif dest[i] = 0; return i; }
int waddnstr(WINDOW *win, const char *str, int n) { int i = 0; PDC_LOG(("waddnstr() - called: string=\"%s\" n %d \n", str, n)); if (!win || !str) return ERR; while (str[i] && (i < n || n < 0)) { #ifdef PDC_WIDE wchar_t wch; int retval = PDC_mbtowc(&wch, str + i, n >= 0 ? n - i : 6); if (retval <= 0) return OK; i += retval; #else chtype wch = (unsigned char)(str[i++]); #endif if (waddch(win, wch) == ERR) return ERR; } return OK; }