/* STRFMON: size_t strfmon (char *buf, size_t nbyte, const char *fmt, ...) */ #define TST_FUNCTION strfmon #include "tsp_common.c" #include "dat_strfmon.c" #include int tst_strfmon (FILE * fp, int debug_flg) { TST_DECL_VARS (size_t); char buf[MONSIZE], *mon; size_t nbt; char *fmt; double val; TST_DO_TEST (strfmon) { TST_HEAD_LOCALE (strfmon, S_STRFMON); TST_DO_REC (strfmon) { TST_GET_ERRET (strfmon); nbt = TST_INPUT (strfmon).nbytes; fmt = TST_INPUT (strfmon).fmt; val = TST_INPUT (strfmon).val; memset (buf, 0, MONSIZE); if (nbt > MONSIZE) { err_count++; Result (C_FAILURE, S_STRFMON, CASE_3, "buffer too small in test"); continue; } TST_CLEAR_ERRNO; ret = strfmon (buf, nbt, fmt, val, val, val); TST_SAVE_ERRNO; if (debug_flg) /* seems fprintf doesn't update the errno */ { fprintf (stdout, "strfmon() [ %s : %d ]\n", locale, rec + 1); fprintf (stdout, " : err = %d | %s\n", errno_save, strerror (errno)); fprintf (stdout, " : ret = %zd; \t fmt = |%s|\n", ret, fmt); fprintf (stdout, " : buf = |%s|\n\n", buf); } TST_IF_RETURN (S_STRFMON) { }; if (errno != 0 || ret == -1) { continue; } mon = TST_EXPECT (strfmon).mon; if (!strcmp (buf, mon)) { Result (C_SUCCESS, S_STRFMON, CASE_3, MS_PASSED); } else { err_count++; Result (C_FAILURE, S_STRFMON, CASE_3, "the formatted string is " "different from an expected result"); } } } return err_count; }