123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*
- WCSRTOMBS: size_t wcsrtombs (char *s, const wchar_t **ws, size_t n,
- mbstate_t *ps)
- */
- #define TST_FUNCTION wcsrtombs
- #include "tsp_common.c"
- #include "dat_wcsrtombs.c"
- #define MARK_VAL 0x01
- int
- tst_wcsrtombs (FILE * fp, int debug_flg)
- {
- TST_DECL_VARS (size_t);
- char s_flg, n;
- const wchar_t *ws, *wp;
- char s[MBSSIZE], *s_in;
- char t_flg, t_ini;
- static mbstate_t t = { 0 };
- mbstate_t *pt;
- int err, i;
- char *s_ex;
- TST_DO_TEST (wcsrtombs)
- {
- TST_HEAD_LOCALE (wcsrtombs, S_WCSRTOMBS);
- TST_DO_REC (wcsrtombs)
- {
- TST_GET_ERRET (wcsrtombs);
- memset (s, MARK_VAL, MBSSIZE);
- s_flg = TST_INPUT (wcsrtombs).s_flg;
- s_in = (s_flg == 1) ? s : (char *) NULL;
- wp = ws = TST_INPUT (wcsrtombs).ws;
- n = TST_INPUT (wcsrtombs).n;
- t_flg = TST_INPUT (wcsrtombs).t_flg;
- t_ini = TST_INPUT (wcsrtombs).t_init;
- pt = (t_flg == 0) ? NULL : &t;
- if (t_ini != 0)
- {
- memset (&t, 0, sizeof (t));
- }
- TST_CLEAR_ERRNO;
- ret = wcsrtombs (s_in, &wp, n, pt);
- TST_SAVE_ERRNO;
- if (debug_flg)
- {
- fprintf (stderr, "wcsrtombs: ret = %zu\n", ret);
- }
- TST_IF_RETURN (S_WCSRTOMBS)
- {
- };
- if (s_in != NULL && ret != (size_t) - 1)
- {
- /* No definition for s, when error occurs. */
- s_ex = TST_EXPECT (wcsrtombs).s;
- for (err = 0, i = 0; i <= ret && i < MBSSIZE; i++)
- {
- if (debug_flg)
- {
- fprintf (stderr,
- " : s[%d] = 0x%hx <-> 0x%hx = s_ex[%d]\n", i,
- s[i], s_ex[i], i);
- }
- if (i == ret && ret == n) /* no null termination */
- {
- if (s[i] == MARK_VAL)
- {
- Result (C_SUCCESS, S_WCSRTOMBS, CASE_4, MS_PASSED);
- }
- else
- {
- err_count++;
- Result (C_FAILURE, S_WCSRTOMBS, CASE_4,
- "should not be null terminated "
- "(it may be a null char), but it is");
- }
- break;
- }
- if (i == ret && ret < n) /* null termination */
- {
- if (s[i] == 0)
- {
- Result (C_SUCCESS, S_WCSRTOMBS, CASE_5, MS_PASSED);
- }
- else
- {
- err_count++;
- Result (C_FAILURE, S_WCSRTOMBS, CASE_5,
- "should be null terminated, but it is not");
- }
- break;
- }
- if (s[i] != s_ex[i])
- {
- err++;
- err_count++;
- Result (C_FAILURE, S_WCSRTOMBS, CASE_6,
- "converted string is different from an"
- " expected string");
- break;
- }
- }
- if (!err)
- {
- Result (C_SUCCESS, S_WCSRTOMBS, CASE_6, MS_PASSED);
- }
- }
- }
- }
- return err_count;
- }
|