| /* |
| MBRLEN: size_t mbrlen (char *s, size_t n, mbstate_t *ps) |
| */ |
| |
| #define TST_FUNCTION mbrlen |
| |
| #include "tsp_common.c" |
| #include "dat_mbrlen.c" |
| |
| |
| int |
| tst_mbrlen (FILE * fp, int debug_flg) |
| { |
| TST_DECL_VARS (size_t); |
| char s_flg; |
| const char *s_in; |
| size_t n; |
| char t_flg; |
| char t_ini; |
| static mbstate_t s = { 0 }; |
| mbstate_t *ps; |
| |
| TST_DO_TEST (mbrlen) |
| { |
| TST_HEAD_LOCALE (mbrlen, S_MBRLEN); |
| TST_DO_REC (mbrlen) |
| { |
| if (mbrlen (NULL, 0, &s) != 0) |
| { |
| err_count++; |
| Result (C_FAILURE, S_MBRLEN, CASE_3, |
| "Initialization (external mbstate object) failed " |
| "- skipped this test case."); |
| continue; |
| } |
| |
| TST_DO_SEQ (MBRLEN_SEQNUM) |
| { |
| TST_GET_ERRET_SEQ (mbrlen); |
| s_flg = TST_INPUT_SEQ (mbrlen).s_flg; |
| s_in = TST_INPUT_SEQ (mbrlen).s; |
| n = TST_INPUT_SEQ (mbrlen).n; |
| t_flg = TST_INPUT_SEQ (mbrlen).t_flg; |
| t_ini = TST_INPUT_SEQ (mbrlen).t_init; |
| if (s_flg == 0) |
| { |
| s_in = NULL; |
| } |
| |
| if (n == USE_MBCURMAX) /* rewrite tst_mblen() like this */ |
| { |
| n = MB_CUR_MAX; |
| } |
| |
| ps = (t_flg == 0) ? NULL : &s; |
| |
| if (t_ini != 0) |
| { |
| memset (&s, 0, sizeof (s)); |
| mbrlen (NULL, 0, NULL); |
| } |
| |
| TST_CLEAR_ERRNO; |
| ret = mbrlen (s_in, n, ps); |
| TST_SAVE_ERRNO; |
| |
| if (debug_flg) |
| { |
| fprintf (stdout, "mbrlen() [ %s : %d : %d ] ret = %zd\n", |
| locale, rec + 1, seq_num + 1, ret); |
| fprintf (stdout, " errno = %d\n", errno_save); |
| } |
| |
| TST_IF_RETURN (S_MBRLEN) |
| { |
| }; |
| } |
| } |
| } |
| |
| return err_count; |
| } |