Blame localedata/tests-mbwc/tst_strfmon.c

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