/* MBSTOWCS: size_t mbstowcs (wchar_t *ws, char *s, size_t n) */ #define TST_FUNCTION mbstowcs #include "tsp_common.c" #include "dat_mbstowcs.c" int tst_mbstowcs (FILE * fp, int debug_flg) { TST_DECL_VARS (size_t); char w_flg, s_flg; const char *s; size_t n; wchar_t ws[WCSSIZE], *ws_ex, *wp; int err, i; TST_DO_TEST (mbstowcs) { TST_HEAD_LOCALE (mbstowcs, S_MBSTOWCS); TST_DO_REC (mbstowcs) { if (mbstowcs (NULL, "", 0) != 0) { err_count++; Result (C_FAILURE, S_MBSTOWCS, CASE_3, "Initialization failed - skipping this test case."); continue; } TST_DO_SEQ (MBSTOWCS_SEQNUM) { TST_GET_ERRET_SEQ (mbstowcs); w_flg = TST_INPUT_SEQ (mbstowcs).w_flg; s_flg = TST_INPUT_SEQ (mbstowcs).s_flg; n = TST_INPUT_SEQ (mbstowcs).n; if (s_flg == 0) s = NULL; else s = TST_INPUT_SEQ (mbstowcs).s; wp = (wchar_t *) ((w_flg == 0) ? NULL : ws); TST_CLEAR_ERRNO; ret = mbstowcs (wp, s, n); TST_SAVE_ERRNO; if (debug_flg) { fprintf (stderr, "mbstowcs: ret = %zd\n", ret); } TST_IF_RETURN (S_MBSTOWCS) { }; if (s == NULL || wp == NULL || ret == (size_t) - 1) { continue; } ws_ex = TST_EXPECT_SEQ (mbstowcs).ws; for (err = 0, i = 0; i < ret; i++) { if (debug_flg) { fprintf (stderr, "mbstowcs: ws[%d] => 0x%lx : 0x%lx <= ws_ex[%d]\n", i, (unsigned long int) ws[i], (unsigned long int) ws_ex[i], i); } if (ws[i] != ws_ex[i]) { err++; err_count++; Result (C_FAILURE, S_MBSTOWCS, CASE_4, "the converted wc string has " "different value from an expected string"); break; } } if (!err) { Result (C_SUCCESS, S_MBSTOWCS, CASE_4, MS_PASSED); } } } } return err_count; }