Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #include <stdlib.h>
  2. #include <wchar.h>
  3. #include "local.h"
  4.  
  5. size_t
  6. _DEFUN (_mbstowcs_r, (reent, pwcs, s, n, state),
  7.         struct _reent *r    _AND        
  8.         wchar_t       *__restrict pwcs _AND
  9.         const char    *__restrict s    _AND
  10.         size_t         n    _AND
  11.         mbstate_t     *state)
  12. {
  13.   size_t ret = 0;
  14.   char *t = (char *)s;
  15.   int bytes;
  16.  
  17.   if (!pwcs)
  18.     n = (size_t) 1; /* Value doesn't matter as long as it's not 0. */
  19.   while (n > 0)
  20.     {
  21.       bytes = __mbtowc (r, pwcs, t, MB_CUR_MAX, __locale_charset (), state);
  22.       if (bytes < 0)
  23.         {
  24.           state->__count = 0;
  25.           return -1;
  26.         }
  27.       else if (bytes == 0)
  28.         break;
  29.       t += bytes;
  30.       ++ret;
  31.       if (pwcs)
  32.         {
  33.           ++pwcs;
  34.           --n;
  35.         }
  36.     }
  37.   return ret;
  38. }  
  39.