| /* |
| SWSCANF: int swscanf (const wchar_t *ws, const wchar_t *fmt, ...); |
| */ |
| |
| #define TST_FUNCTION swscanf |
| |
| #include "tsp_common.c" |
| #include "dat_swscanf.c" |
| |
| int |
| tst_swscanf (FILE * fp, int debug_flg) |
| { |
| TST_DECL_VARS (int); |
| wchar_t *ws; |
| wchar_t *fmt; |
| int val_int1; |
| unsigned val_int2; |
| float val_flt; |
| char val_c; |
| char val_s[MBSSIZE * 3]; |
| wchar_t val_S[WCSSIZE * 3], *exp_S; |
| int i; |
| |
| TST_DO_TEST (swscanf) |
| { |
| TST_HEAD_LOCALE (swscanf, S_SWSCANF); |
| TST_DO_REC (swscanf) |
| { |
| TST_GET_ERRET (swscanf); |
| ws = TST_INPUT (swscanf).ws; |
| fmt = TST_INPUT (swscanf).fmt; |
| val_int1 = val_int2 = val_flt = val_c = 0; |
| memset (val_s, 0, sizeof (val_s)); |
| memset (val_S, 0, sizeof (val_S)); |
| |
| TST_CLEAR_ERRNO; |
| |
| if (TST_INPUT (swscanf).wch) |
| { |
| ret = swscanf (ws, fmt, val_S); |
| } |
| else |
| { |
| ret = |
| swscanf (ws, fmt, &val_int1, &val_int2, &val_flt, &val_c, val_s); |
| } |
| |
| TST_SAVE_ERRNO; |
| |
| if (debug_flg) |
| { /* seems fprintf doesn't update errno */ |
| fprintf (stdout, "swscanf() [ %s : %d ] ret = %d\n", locale, |
| rec + 1, ret); |
| fprintf (stdout, " errno = %d\n", |
| errno_save); |
| fprintf (stdout, " collate = %s\n", |
| (setlocale (LC_COLLATE, NULL)) ? setlocale (LC_COLLATE, |
| NULL) : ""); |
| |
| if (TST_INPUT (swscanf).wch) |
| { |
| fprintf (stdout, " val_S[ 0 ] = 0x%lx\n", |
| (unsigned long int) val_S[0]); |
| } |
| else |
| { |
| fprintf (stdout, " val_int1 = %d\n", |
| val_int1); |
| fprintf (stdout, " val_int2 = %d\n", |
| val_int2); |
| fprintf (stdout, " val_flt = %f\n", |
| val_flt); |
| fprintf (stdout, " val_c = %c\n", |
| val_c); |
| fprintf (stdout, " val_s = %s\n", |
| val_s); |
| } |
| } |
| |
| TST_IF_RETURN (S_SWSCANF) |
| { |
| }; |
| |
| if (errno == 0 && TST_INPUT (swscanf).wch) |
| { |
| for (exp_S = TST_EXPECT (swscanf).val_S, i = 0; i < WCSSIZE * 3; |
| i++) |
| { |
| if (val_S[i] == L'\0' || exp_S[i] == L'\0') |
| { |
| if (val_S[i] != exp_S[i] && TST_INPUT (swscanf).wch == 'C') |
| { |
| err_count++; |
| Result (C_FAILURE, S_SWSCANF, CASE_4, |
| "the converted wide-char string is different" |
| " from an expected value."); |
| } |
| break; |
| } |
| |
| if (val_S[i] != exp_S[i]) |
| { |
| err_count++; |
| Result (C_FAILURE, S_SWSCANF, CASE_4, |
| "the converted wide-char string is different from" |
| " an expected value."); |
| break; |
| } |
| else |
| { |
| Result (C_SUCCESS, S_SWSCANF, CASE_4, MS_PASSED); |
| } |
| } |
| } |
| |
| if (errno == 0 && !TST_INPUT (swscanf).wch) |
| { |
| if (val_int1 != TST_EXPECT (swscanf).val_int || |
| val_int2 != TST_EXPECT (swscanf).val_uns || |
| val_flt != TST_EXPECT (swscanf).val_flt || |
| val_c != TST_EXPECT (swscanf).val_c || |
| strcmp (val_s, TST_EXPECT (swscanf).val_s)) |
| { |
| err_count++; |
| Result (C_FAILURE, S_SWSCANF, CASE_3, |
| "the converted values are different from expected values."); |
| } |
| else |
| { |
| Result (C_SUCCESS, S_SWSCANF, CASE_3, MS_PASSED); |
| } |
| } |
| } |
| } |
| |
| return err_count; |
| } |