1# mbrtowc.m4 serial 26 2dnl Copyright (C) 2001-2002, 2004-2005, 2008-2014 Free Software Foundation, 3dnl Inc. 4dnl This file is free software; the Free Software Foundation 5dnl gives unlimited permission to copy and/or distribute it, 6dnl with or without modifications, as long as this notice is preserved. 7 8AC_DEFUN([gl_FUNC_MBRTOWC], 9[ 10 AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) 11 12 AC_REQUIRE([AC_TYPE_MBSTATE_T]) 13 gl_MBSTATE_T_BROKEN 14 15 AC_CHECK_FUNCS_ONCE([mbrtowc]) 16 if test $ac_cv_func_mbrtowc = no; then 17 HAVE_MBRTOWC=0 18 AC_CHECK_DECLS([mbrtowc],,, [[ 19/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 20 <wchar.h>. 21 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 22 included before <wchar.h>. */ 23#include <stddef.h> 24#include <stdio.h> 25#include <time.h> 26#include <wchar.h> 27]]) 28 if test $ac_cv_have_decl_mbrtowc = yes; then 29 dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although 30 dnl it does not have the function. Avoid a collision with gnulib's 31 dnl replacement. 32 REPLACE_MBRTOWC=1 33 fi 34 else 35 if test $REPLACE_MBSTATE_T = 1; then 36 REPLACE_MBRTOWC=1 37 else 38 gl_MBRTOWC_NULL_ARG1 39 gl_MBRTOWC_NULL_ARG2 40 gl_MBRTOWC_RETVAL 41 gl_MBRTOWC_NUL_RETVAL 42 gl_MBRTOWC_EMPTY_INPUT 43 case "$gl_cv_func_mbrtowc_null_arg1" in 44 *yes) ;; 45 *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], 46 [Define if the mbrtowc function has the NULL pwc argument bug.]) 47 REPLACE_MBRTOWC=1 48 ;; 49 esac 50 case "$gl_cv_func_mbrtowc_null_arg2" in 51 *yes) ;; 52 *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], 53 [Define if the mbrtowc function has the NULL string argument bug.]) 54 REPLACE_MBRTOWC=1 55 ;; 56 esac 57 case "$gl_cv_func_mbrtowc_retval" in 58 *yes) ;; 59 *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], 60 [Define if the mbrtowc function returns a wrong return value.]) 61 REPLACE_MBRTOWC=1 62 ;; 63 esac 64 case "$gl_cv_func_mbrtowc_nul_retval" in 65 *yes) ;; 66 *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], 67 [Define if the mbrtowc function does not return 0 for a NUL character.]) 68 REPLACE_MBRTOWC=1 69 ;; 70 esac 71 case "$gl_cv_func_mbrtowc_empty_input" in 72 *yes) ;; 73 *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], 74 [Define if the mbrtowc function does not return (size_t) -2 75 for empty input.]) 76 REPLACE_MBRTOWC=1 77 ;; 78 esac 79 fi 80 fi 81]) 82 83dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that 84dnl redefines the semantics of the given mbstate_t type. 85dnl Result is REPLACE_MBSTATE_T. 86dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to 87dnl avoid inconsistencies. 88 89AC_DEFUN([gl_MBSTATE_T_BROKEN], 90[ 91 AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) 92 93 AC_REQUIRE([AC_TYPE_MBSTATE_T]) 94 AC_CHECK_FUNCS_ONCE([mbsinit]) 95 AC_CHECK_FUNCS_ONCE([mbrtowc]) 96 if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then 97 gl_MBRTOWC_INCOMPLETE_STATE 98 gl_MBRTOWC_SANITYCHECK 99 REPLACE_MBSTATE_T=0 100 case "$gl_cv_func_mbrtowc_incomplete_state" in 101 *yes) ;; 102 *) REPLACE_MBSTATE_T=1 ;; 103 esac 104 case "$gl_cv_func_mbrtowc_sanitycheck" in 105 *yes) ;; 106 *) REPLACE_MBSTATE_T=1 ;; 107 esac 108 else 109 REPLACE_MBSTATE_T=1 110 fi 111]) 112 113dnl Test whether mbrtowc puts the state into non-initial state when parsing an 114dnl incomplete multibyte character. 115dnl Result is gl_cv_func_mbrtowc_incomplete_state. 116 117AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], 118[ 119 AC_REQUIRE([AC_PROG_CC]) 120 AC_REQUIRE([gt_LOCALE_JA]) 121 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 122 AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], 123 [gl_cv_func_mbrtowc_incomplete_state], 124 [ 125 dnl Initial guess, used when cross-compiling or when no suitable locale 126 dnl is present. 127changequote(,)dnl 128 case "$host_os" in 129 # Guess no on AIX and OSF/1. 130 aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; 131 # Guess yes otherwise. 132 *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; 133 esac 134changequote([,])dnl 135 if test $LOCALE_JA != none; then 136 AC_RUN_IFELSE( 137 [AC_LANG_SOURCE([[ 138#include <locale.h> 139#include <string.h> 140/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 141 <wchar.h>. 142 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 143 included before <wchar.h>. */ 144#include <stddef.h> 145#include <stdio.h> 146#include <time.h> 147#include <wchar.h> 148int main () 149{ 150 if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) 151 { 152 const char input[] = "B\217\253\344\217\251\316er"; /* "B����er" */ 153 mbstate_t state; 154 wchar_t wc; 155 156 memset (&state, '\0', sizeof (mbstate_t)); 157 if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) 158 if (mbsinit (&state)) 159 return 1; 160 } 161 return 0; 162}]])], 163 [gl_cv_func_mbrtowc_incomplete_state=yes], 164 [gl_cv_func_mbrtowc_incomplete_state=no], 165 [:]) 166 fi 167 ]) 168]) 169 170dnl Test whether mbrtowc works not worse than mbtowc. 171dnl Result is gl_cv_func_mbrtowc_sanitycheck. 172 173AC_DEFUN([gl_MBRTOWC_SANITYCHECK], 174[ 175 AC_REQUIRE([AC_PROG_CC]) 176 AC_REQUIRE([gt_LOCALE_ZH_CN]) 177 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 178 AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], 179 [gl_cv_func_mbrtowc_sanitycheck], 180 [ 181 dnl Initial guess, used when cross-compiling or when no suitable locale 182 dnl is present. 183changequote(,)dnl 184 case "$host_os" in 185 # Guess no on Solaris 8. 186 solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; 187 # Guess yes otherwise. 188 *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; 189 esac 190changequote([,])dnl 191 if test $LOCALE_ZH_CN != none; then 192 AC_RUN_IFELSE( 193 [AC_LANG_SOURCE([[ 194#include <locale.h> 195#include <stdlib.h> 196#include <string.h> 197/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 198 <wchar.h>. 199 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 200 included before <wchar.h>. */ 201#include <stddef.h> 202#include <stdio.h> 203#include <time.h> 204#include <wchar.h> 205int main () 206{ 207 /* This fails on Solaris 8: 208 mbrtowc returns 2, and sets wc to 0x00F0. 209 mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ 210 if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) 211 { 212 char input[] = "B\250\271\201\060\211\070er"; /* "B����er" */ 213 mbstate_t state; 214 wchar_t wc; 215 216 memset (&state, '\0', sizeof (mbstate_t)); 217 if (mbrtowc (&wc, input + 3, 6, &state) != 4 218 && mbtowc (&wc, input + 3, 6) == 4) 219 return 1; 220 } 221 return 0; 222}]])], 223 [gl_cv_func_mbrtowc_sanitycheck=yes], 224 [gl_cv_func_mbrtowc_sanitycheck=no], 225 [:]) 226 fi 227 ]) 228]) 229 230dnl Test whether mbrtowc supports a NULL pwc argument correctly. 231dnl Result is gl_cv_func_mbrtowc_null_arg1. 232 233AC_DEFUN([gl_MBRTOWC_NULL_ARG1], 234[ 235 AC_REQUIRE([AC_PROG_CC]) 236 AC_REQUIRE([gt_LOCALE_FR_UTF8]) 237 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 238 AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], 239 [gl_cv_func_mbrtowc_null_arg1], 240 [ 241 dnl Initial guess, used when cross-compiling or when no suitable locale 242 dnl is present. 243changequote(,)dnl 244 case "$host_os" in 245 # Guess no on Solaris. 246 solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; 247 # Guess yes otherwise. 248 *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; 249 esac 250changequote([,])dnl 251 if test $LOCALE_FR_UTF8 != none; then 252 AC_RUN_IFELSE( 253 [AC_LANG_SOURCE([[ 254#include <locale.h> 255#include <stdlib.h> 256#include <string.h> 257/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 258 <wchar.h>. 259 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 260 included before <wchar.h>. */ 261#include <stddef.h> 262#include <stdio.h> 263#include <time.h> 264#include <wchar.h> 265int main () 266{ 267 int result = 0; 268 269 if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) 270 { 271 char input[] = "\303\237er"; 272 mbstate_t state; 273 wchar_t wc; 274 size_t ret; 275 276 memset (&state, '\0', sizeof (mbstate_t)); 277 wc = (wchar_t) 0xBADFACE; 278 ret = mbrtowc (&wc, input, 5, &state); 279 if (ret != 2) 280 result |= 1; 281 if (!mbsinit (&state)) 282 result |= 2; 283 284 memset (&state, '\0', sizeof (mbstate_t)); 285 ret = mbrtowc (NULL, input, 5, &state); 286 if (ret != 2) /* Solaris 7 fails here: ret is -1. */ 287 result |= 4; 288 if (!mbsinit (&state)) 289 result |= 8; 290 } 291 return result; 292}]])], 293 [gl_cv_func_mbrtowc_null_arg1=yes], 294 [gl_cv_func_mbrtowc_null_arg1=no], 295 [:]) 296 fi 297 ]) 298]) 299 300dnl Test whether mbrtowc supports a NULL string argument correctly. 301dnl Result is gl_cv_func_mbrtowc_null_arg2. 302 303AC_DEFUN([gl_MBRTOWC_NULL_ARG2], 304[ 305 AC_REQUIRE([AC_PROG_CC]) 306 AC_REQUIRE([gt_LOCALE_FR_UTF8]) 307 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 308 AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], 309 [gl_cv_func_mbrtowc_null_arg2], 310 [ 311 dnl Initial guess, used when cross-compiling or when no suitable locale 312 dnl is present. 313changequote(,)dnl 314 case "$host_os" in 315 # Guess no on OSF/1. 316 osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; 317 # Guess yes otherwise. 318 *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; 319 esac 320changequote([,])dnl 321 if test $LOCALE_FR_UTF8 != none; then 322 AC_RUN_IFELSE( 323 [AC_LANG_SOURCE([[ 324#include <locale.h> 325#include <string.h> 326/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 327 <wchar.h>. 328 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 329 included before <wchar.h>. */ 330#include <stddef.h> 331#include <stdio.h> 332#include <time.h> 333#include <wchar.h> 334int main () 335{ 336 if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) 337 { 338 mbstate_t state; 339 wchar_t wc; 340 int ret; 341 342 memset (&state, '\0', sizeof (mbstate_t)); 343 wc = (wchar_t) 0xBADFACE; 344 mbrtowc (&wc, NULL, 5, &state); 345 /* Check that wc was not modified. */ 346 if (wc != (wchar_t) 0xBADFACE) 347 return 1; 348 } 349 return 0; 350}]])], 351 [gl_cv_func_mbrtowc_null_arg2=yes], 352 [gl_cv_func_mbrtowc_null_arg2=no], 353 [:]) 354 fi 355 ]) 356]) 357 358dnl Test whether mbrtowc, when parsing the end of a multibyte character, 359dnl correctly returns the number of bytes that were needed to complete the 360dnl character (not the total number of bytes of the multibyte character). 361dnl Result is gl_cv_func_mbrtowc_retval. 362 363AC_DEFUN([gl_MBRTOWC_RETVAL], 364[ 365 AC_REQUIRE([AC_PROG_CC]) 366 AC_REQUIRE([gt_LOCALE_FR_UTF8]) 367 AC_REQUIRE([gt_LOCALE_JA]) 368 AC_REQUIRE([AC_CANONICAL_HOST]) 369 AC_CACHE_CHECK([whether mbrtowc has a correct return value], 370 [gl_cv_func_mbrtowc_retval], 371 [ 372 dnl Initial guess, used when cross-compiling or when no suitable locale 373 dnl is present. 374changequote(,)dnl 375 case "$host_os" in 376 # Guess no on HP-UX, Solaris, native Windows. 377 hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; 378 # Guess yes otherwise. 379 *) gl_cv_func_mbrtowc_retval="guessing yes" ;; 380 esac 381changequote([,])dnl 382 if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ 383 || { case "$host_os" in mingw*) true;; *) false;; esac; }; then 384 AC_RUN_IFELSE( 385 [AC_LANG_SOURCE([[ 386#include <locale.h> 387#include <string.h> 388/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 389 <wchar.h>. 390 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 391 included before <wchar.h>. */ 392#include <stddef.h> 393#include <stdio.h> 394#include <time.h> 395#include <wchar.h> 396int main () 397{ 398 int result = 0; 399 int found_some_locale = 0; 400 /* This fails on Solaris. */ 401 if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) 402 { 403 char input[] = "B\303\274\303\237er"; /* "B����er" */ 404 mbstate_t state; 405 wchar_t wc; 406 407 memset (&state, '\0', sizeof (mbstate_t)); 408 if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) 409 { 410 input[1] = '\0'; 411 if (mbrtowc (&wc, input + 2, 5, &state) != 1) 412 result |= 1; 413 } 414 found_some_locale = 1; 415 } 416 /* This fails on HP-UX 11.11. */ 417 if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) 418 { 419 char input[] = "B\217\253\344\217\251\316er"; /* "B����er" */ 420 mbstate_t state; 421 wchar_t wc; 422 423 memset (&state, '\0', sizeof (mbstate_t)); 424 if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) 425 { 426 input[1] = '\0'; 427 if (mbrtowc (&wc, input + 2, 5, &state) != 2) 428 result |= 2; 429 } 430 found_some_locale = 1; 431 } 432 /* This fails on native Windows. */ 433 if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) 434 { 435 char input[] = "<\223\372\226\173\214\352>"; /* "<���������>" */ 436 mbstate_t state; 437 wchar_t wc; 438 439 memset (&state, '\0', sizeof (mbstate_t)); 440 if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) 441 { 442 input[3] = '\0'; 443 if (mbrtowc (&wc, input + 4, 4, &state) != 1) 444 result |= 4; 445 } 446 found_some_locale = 1; 447 } 448 if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) 449 { 450 char input[] = "<\244\351\245\273\273\171>"; /* "<���������>" */ 451 mbstate_t state; 452 wchar_t wc; 453 454 memset (&state, '\0', sizeof (mbstate_t)); 455 if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) 456 { 457 input[3] = '\0'; 458 if (mbrtowc (&wc, input + 4, 4, &state) != 1) 459 result |= 8; 460 } 461 found_some_locale = 1; 462 } 463 if (setlocale (LC_ALL, "Chinese_China.936") != NULL) 464 { 465 char input[] = "<\310\325\261\276\325\132>"; /* "<���������>" */ 466 mbstate_t state; 467 wchar_t wc; 468 469 memset (&state, '\0', sizeof (mbstate_t)); 470 if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) 471 { 472 input[3] = '\0'; 473 if (mbrtowc (&wc, input + 4, 4, &state) != 1) 474 result |= 16; 475 } 476 found_some_locale = 1; 477 } 478 return (found_some_locale ? result : 77); 479}]])], 480 [gl_cv_func_mbrtowc_retval=yes], 481 [if test $? != 77; then 482 gl_cv_func_mbrtowc_retval=no 483 fi 484 ], 485 [:]) 486 fi 487 ]) 488]) 489 490dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. 491dnl Result is gl_cv_func_mbrtowc_nul_retval. 492 493AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], 494[ 495 AC_REQUIRE([AC_PROG_CC]) 496 AC_REQUIRE([gt_LOCALE_ZH_CN]) 497 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 498 AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], 499 [gl_cv_func_mbrtowc_nul_retval], 500 [ 501 dnl Initial guess, used when cross-compiling or when no suitable locale 502 dnl is present. 503changequote(,)dnl 504 case "$host_os" in 505 # Guess no on Solaris 8 and 9. 506 solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; 507 # Guess yes otherwise. 508 *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; 509 esac 510changequote([,])dnl 511 if test $LOCALE_ZH_CN != none; then 512 AC_RUN_IFELSE( 513 [AC_LANG_SOURCE([[ 514#include <locale.h> 515#include <string.h> 516/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before 517 <wchar.h>. 518 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be 519 included before <wchar.h>. */ 520#include <stddef.h> 521#include <stdio.h> 522#include <time.h> 523#include <wchar.h> 524int main () 525{ 526 /* This fails on Solaris 8 and 9. */ 527 if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) 528 { 529 mbstate_t state; 530 wchar_t wc; 531 532 memset (&state, '\0', sizeof (mbstate_t)); 533 if (mbrtowc (&wc, "", 1, &state) != 0) 534 return 1; 535 } 536 return 0; 537}]])], 538 [gl_cv_func_mbrtowc_nul_retval=yes], 539 [gl_cv_func_mbrtowc_nul_retval=no], 540 [:]) 541 fi 542 ]) 543]) 544 545dnl Test whether mbrtowc returns the correct value on empty input. 546 547AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], 548[ 549 AC_REQUIRE([AC_PROG_CC]) 550 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 551 AC_CACHE_CHECK([whether mbrtowc works on empty input], 552 [gl_cv_func_mbrtowc_empty_input], 553 [ 554 dnl Initial guess, used when cross-compiling or when no suitable locale 555 dnl is present. 556changequote(,)dnl 557 case "$host_os" in 558 # Guess no on AIX and glibc systems. 559 aix* | *-gnu*) 560 gl_cv_func_mbrtowc_empty_input="guessing no" ;; 561 *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; 562 esac 563changequote([,])dnl 564 AC_RUN_IFELSE( 565 [AC_LANG_SOURCE([[ 566 #include <wchar.h> 567 static wchar_t wc; 568 static mbstate_t mbs; 569 int 570 main (void) 571 { 572 return mbrtowc (&wc, "", 0, &mbs) == (size_t) -2; 573 }]])], 574 [gl_cv_func_mbrtowc_empty_input=no], 575 [gl_cv_func_mbrtowc_empty_input=yes], 576 [:]) 577 ]) 578]) 579 580# Prerequisites of lib/mbrtowc.c. 581AC_DEFUN([gl_PREREQ_MBRTOWC], [ 582 : 583]) 584 585 586dnl From Paul Eggert 587 588dnl This is an override of an autoconf macro. 589 590AC_DEFUN([AC_FUNC_MBRTOWC], 591[ 592 dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. 593 AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], 594 gl_cv_func_mbrtowc, 595 [AC_LINK_IFELSE( 596 [AC_LANG_PROGRAM( 597 [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be 598 included before <wchar.h>. 599 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> 600 must be included before <wchar.h>. */ 601 #include <stddef.h> 602 #include <stdio.h> 603 #include <time.h> 604 #include <wchar.h>]], 605 [[wchar_t wc; 606 char const s[] = ""; 607 size_t n = 1; 608 mbstate_t state; 609 return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], 610 gl_cv_func_mbrtowc=yes, 611 gl_cv_func_mbrtowc=no)]) 612 if test $gl_cv_func_mbrtowc = yes; then 613 AC_DEFINE([HAVE_MBRTOWC], [1], 614 [Define to 1 if mbrtowc and mbstate_t are properly declared.]) 615 fi 616]) 617