Back to index

glibc  2.9
tst_mbstowcs.c
Go to the documentation of this file.
00001 /*
00002   MBSTOWCS: size_t mbstowcs (wchar_t *ws, char *s, size_t n)
00003 */
00004 
00005 #define TST_FUNCTION mbstowcs
00006 
00007 #include "tsp_common.c"
00008 #include "dat_mbstowcs.c"
00009 
00010 int
00011 tst_mbstowcs (FILE * fp, int debug_flg)
00012 {
00013   TST_DECL_VARS (size_t);
00014   char w_flg, s_flg;
00015   const char *s;
00016   size_t n;
00017   wchar_t ws[WCSSIZE], *ws_ex, *wp;
00018   int err, i;
00019 
00020   TST_DO_TEST (mbstowcs)
00021   {
00022     TST_HEAD_LOCALE (mbstowcs, S_MBSTOWCS);
00023     TST_DO_REC (mbstowcs)
00024     {
00025       if (mbstowcs (NULL, "", 0) != 0)
00026        {
00027          err_count++;
00028          Result (C_FAILURE, S_MBSTOWCS, CASE_3,
00029                 "Initialization failed - skipping this test case.");
00030          continue;
00031        }
00032 
00033       TST_DO_SEQ (MBSTOWCS_SEQNUM)
00034       {
00035        TST_GET_ERRET_SEQ (mbstowcs);
00036        w_flg = TST_INPUT_SEQ (mbstowcs).w_flg;
00037        s_flg = TST_INPUT_SEQ (mbstowcs).s_flg;
00038        n = TST_INPUT_SEQ (mbstowcs).n;
00039 
00040        if (s_flg == 0)
00041          s = NULL;
00042        else
00043          s = TST_INPUT_SEQ (mbstowcs).s;
00044 
00045 
00046        wp = (wchar_t *) ((w_flg == 0) ? NULL : ws);
00047 
00048        TST_CLEAR_ERRNO;
00049        ret = mbstowcs (wp, s, n);
00050        TST_SAVE_ERRNO;
00051 
00052        if (debug_flg)
00053          {
00054            fprintf (stderr, "mbstowcs: ret = %zd\n", ret);
00055          }
00056 
00057        TST_IF_RETURN (S_MBSTOWCS)
00058        {
00059        };
00060 
00061        if (s == NULL || wp == NULL || ret == (size_t) - 1)
00062          {
00063            continue;
00064          }
00065 
00066        ws_ex = TST_EXPECT_SEQ (mbstowcs).ws;
00067 
00068        for (err = 0, i = 0; i < ret; i++)
00069          {
00070            if (debug_flg)
00071              {
00072               fprintf (stderr,
00073                       "mbstowcs: ws[%d] => 0x%lx : 0x%lx <= ws_ex[%d]\n",
00074                       i, (unsigned long int) ws[i],
00075                       (unsigned long int) ws_ex[i], i);
00076              }
00077 
00078            if (ws[i] != ws_ex[i])
00079              {
00080               err++;
00081               err_count++;
00082               Result (C_FAILURE, S_MBSTOWCS, CASE_4,
00083                      "the converted wc string has "
00084                      "different value from an expected string");
00085               break;
00086              }
00087          }
00088 
00089        if (!err)
00090          {
00091            Result (C_SUCCESS, S_MBSTOWCS, CASE_4, MS_PASSED);
00092          }
00093       }
00094     }
00095   }
00096 
00097   return err_count;
00098 }