The latest daily build of mutt fails to link on old systems where HAVE_WC_FUNCS is not defined due to missing functions fgetwc, ungetwc and fputws. Attached is a half-baked patch to address this. It's barely tested (it compiles fine!) and only attempts multibyte conversion on the output side (the get side just uses the non-multibyte functions), but at least it's here before the Monday deadline! >>> Dan -- http://www.MoveAnnouncer.com The web change of address service Let webmasters know that your web site has moved
--- mbyte.h.orig Sat Jan 3 21:23:47 2009 +++ mbyte.h Sun Jan 4 00:40:04 2009 @@ -37,6 +37,12 @@ wint_t towupper (wint_t wc); wint_t towlower (wint_t wc); int wcwidth (wchar_t wc); + +#define fgetwc(f) ((wint_t)(fgetc(f))) +#define ungetwc(c,f) ((wint_t)(ungetc((int)(c),f))) + +wint_t fputwc(wchar_t wc, FILE *stream); +int fputws(const wchar_t *ws, FILE *stream); # endif /* !HAVE_WC_FUNCS */ --- mbyte.c.orig Sat Nov 22 00:00:04 2008 +++ mbyte.c Sun Jan 4 00:43:09 2009 @@ -516,6 +516,28 @@ return (size_t)-2; } +wint_t fputwc(wchar_t wc, FILE *stream) +{ + char buf[MB_LEN_MAX]; + size_t l = wcrtomb(buf, wc, NULL); + if (fprintf(stream, "%.*s", (int)l, buf) < 0) + return -1; + return wc; +} + +int fputws(const wchar_t *ws, FILE *stream) +{ + int c = 0; + while (*ws) { + wint_t rc = fputwc(*ws,stream); + if (rc < 0) + return rc; + ++ws; + ++c; + } + return c; +} + #endif /* !HAVE_WC_FUNCS */ wchar_t replacement_char (void)
Attachment:
pgpZLltn5Z3cS.pgp
Description: PGP signature