wcwidth and mbtowc (because they're part of POSIX) but we didn't turn on
MULTIBYTE_SUPPORT because configure was testing to see if those functions
were supported ... and because the tests never ran, it always came back
as not being supported. Time to bite the bullet and turn MULTIBYTE_SUPPORT
on by default.
dnl ---------------
AC_CHECK_FUNCS([writev lstat nl_langinfo])
dnl ---------------
AC_CHECK_FUNCS([writev lstat nl_langinfo])
-dnl Check for multibyte character set support
-if test "x$ac_cv_header_wchar_h" = "xyes" -a "x$ac_cv_header_wctype_h" = "xyes" \
- -a "x$ac_cv_func_wcwidth" = "xyes" -a "x$ac_cv_func_mbtowc" = "xyes"; then
- AC_DEFINE(MULTIBYTE_SUPPORT, 1,
- [Define to enable support for multibyte character sets.])
-fi
-
dnl -------------------
dnl CHECK FOR LIBRARIES
dnl -------------------
dnl -------------------
dnl CHECK FOR LIBRARIES
dnl -------------------
# include <sys/time.h>
#endif
#include <time.h>
# include <sys/time.h>
#endif
#include <time.h>
-#ifdef MULTIBYTE_SUPPORT
-# include <wctype.h>
-# include <wchar.h>
-#endif
+#include <wctype.h>
+#include <wchar.h>
#ifdef LBL
struct msgs *fmt_current_folder; /* current folder (set by main program) */
#ifdef LBL
struct msgs *fmt_current_folder; /* current folder (set by main program) */
int remaining; /* remaining output width available */
int c, ljust;
int end; /* number of input bytes remaining in str */
int remaining; /* remaining output width available */
int c, ljust;
int end; /* number of input bytes remaining in str */
-#ifdef MULTIBYTE_SUPPORT
int char_len; /* bytes in current character */
int w;
wchar_t wide_char;
int char_len; /* bytes in current character */
int w;
wchar_t wide_char;
char *sp; /* current position in source string */
char *cp = *dest; /* current position in destination string */
char *ep = cp + n; /* end of destination buffer */
char *sp; /* current position in source string */
char *cp = *dest; /* current position in destination string */
char *ep = cp + n; /* end of destination buffer */
mbtowc(NULL, NULL, 0); /* reset shift state */
end = strlen(str);
while (*sp && remaining > 0 && end > 0) {
mbtowc(NULL, NULL, 0); /* reset shift state */
end = strlen(str);
while (*sp && remaining > 0 && end > 0) {
-#ifdef MULTIBYTE_SUPPORT
char_len = mbtowc(&wide_char, sp, end);
if (char_len <= 0 || (cp + char_len > ep))
break;
char_len = mbtowc(&wide_char, sp, end);
if (char_len <= 0 || (cp + char_len > ep))
break;
if (iswcntrl(wide_char) || iswspace(wide_char)) {
sp += char_len;
if (iswcntrl(wide_char) || iswspace(wide_char)) {
sp += char_len;
-#else
- end--;
- /* isnctrl(), etc., take an int argument. Cygwin's ctype.h
- intentionally warns if they are passed a char. */
- int c = *sp;
- if (iscntrl(c) || isspace(c)) {
- sp++;
-#endif
if (!prevCtrl) {
*cp++ = ' ';
remaining--;
if (!prevCtrl) {
*cp++ = ' ';
remaining--;
-#ifdef MULTIBYTE_SUPPORT
w = wcwidth(wide_char);
if (w >= 0 && remaining >= w) {
strncpy(cp, sp, char_len);
w = wcwidth(wide_char);
if (w >= 0 && remaining >= w) {
strncpy(cp, sp, char_len);
remaining -= w;
}
sp += char_len;
remaining -= w;
}
sp += char_len;
-#else
- *cp++ = *sp++;
- remaining--;
-#endif
*/
static int mh_fputs(char *, FILE *);
*/
static int mh_fputs(char *, FILE *);
-#ifdef MULTIBYTE_SUPPORT
#define SCAN_CHARWIDTH MB_CUR_MAX
#define SCAN_CHARWIDTH MB_CUR_MAX
-#else
-#define SCAN_CHARWIDTH 1
-#endif
int
scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg,
int
scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg,