OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc1/] [newlib/] [libc/] [stdlib/] [mbsnrtowcs.c] - Diff between revs 207 and 345

Only display areas with differences | Details | Blame | View Log

Rev 207 Rev 345
/*
/*
FUNCTION
FUNCTION
<<mbsrtowcs>>, <<mbsnrtowcs>>---convert a character string to a wide-character string
<<mbsrtowcs>>, <<mbsnrtowcs>>---convert a character string to a wide-character string
 
 
INDEX
INDEX
        mbsrtowcs
        mbsrtowcs
INDEX
INDEX
        _mbsrtowcs_r
        _mbsrtowcs_r
INDEX
INDEX
        mbsnrtowcs
        mbsnrtowcs
INDEX
INDEX
        _mbsnrtowcs_r
        _mbsnrtowcs_r
 
 
ANSI_SYNOPSIS
ANSI_SYNOPSIS
        #include <wchar.h>
        #include <wchar.h>
        size_t mbsrtowcs(wchar_t *<[dst]>, const char **<[src]>, size_t <[len]>,
        size_t mbsrtowcs(wchar_t *<[dst]>, const char **<[src]>, size_t <[len]>,
                         mbstate_t *<[ps]>);
                         mbstate_t *<[ps]>);
 
 
        #include <wchar.h>
        #include <wchar.h>
        size_t _mbsrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
        size_t _mbsrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
                            const char **<[src]>, size_t <[len]>,
                            const char **<[src]>, size_t <[len]>,
                            mbstate_t *<[ps]>);
                            mbstate_t *<[ps]>);
 
 
        #include <wchar.h>
        #include <wchar.h>
        size_t mbsnrtowcs(wchar_t *<[dst]>, const char **<[src]>,
        size_t mbsnrtowcs(wchar_t *<[dst]>, const char **<[src]>,
                          size_t <[nms]>, size_t <[len]>, mbstate_t *<[ps]>);
                          size_t <[nms]>, size_t <[len]>, mbstate_t *<[ps]>);
 
 
        #include <wchar.h>
        #include <wchar.h>
        size_t _mbsnrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
        size_t _mbsnrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
                             const char **<[src]>, size_t <[nms]>,
                             const char **<[src]>, size_t <[nms]>,
                             size_t <[len]>, mbstate_t *<[ps]>);
                             size_t <[len]>, mbstate_t *<[ps]>);
 
 
TRAD_SYNOPSIS
TRAD_SYNOPSIS
        #include <wchar.h>
        #include <wchar.h>
        size_t mbsrtowcs(<[dst]>, <[src]>, <[len]>, <[ps]>)
        size_t mbsrtowcs(<[dst]>, <[src]>, <[len]>, <[ps]>)
        wchar_t *<[dst]>;
        wchar_t *<[dst]>;
        const char **<[src]>;
        const char **<[src]>;
        size_t <[len]>;
        size_t <[len]>;
        mbstate_t *<[ps]>;
        mbstate_t *<[ps]>;
 
 
        #include <wchar.h>
        #include <wchar.h>
        size_t _mbsrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[len]>, <[ps]>)
        size_t _mbsrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[len]>, <[ps]>)
        struct _reent *<[ptr]>;
        struct _reent *<[ptr]>;
        wchar_t *<[dst]>;
        wchar_t *<[dst]>;
        const char **<[src]>;
        const char **<[src]>;
        size_t <[len]>;
        size_t <[len]>;
        mbstate_t *<[ps]>;
        mbstate_t *<[ps]>;
 
 
        #include <wchar.h>
        #include <wchar.h>
        size_t mbsnrtowcs(<[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
        size_t mbsnrtowcs(<[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
        wchar_t *<[dst]>;
        wchar_t *<[dst]>;
        const char **<[src]>;
        const char **<[src]>;
        size_t <[nms]>;
        size_t <[nms]>;
        size_t <[len]>;
        size_t <[len]>;
        mbstate_t *<[ps]>;
        mbstate_t *<[ps]>;
 
 
        #include <wchar.h>
        #include <wchar.h>
        size_t _mbsnrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
        size_t _mbsnrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
        struct _reent *<[ptr]>;
        struct _reent *<[ptr]>;
        wchar_t *<[dst]>;
        wchar_t *<[dst]>;
        const char **<[src]>;
        const char **<[src]>;
        size_t <[nms]>;
        size_t <[nms]>;
        size_t <[len]>;
        size_t <[len]>;
        mbstate_t *<[ps]>;
        mbstate_t *<[ps]>;
 
 
DESCRIPTION
DESCRIPTION
The <<mbsrtowcs>> function converts a sequence of multibyte characters
The <<mbsrtowcs>> function converts a sequence of multibyte characters
pointed to indirectly by <[src]> into a sequence of corresponding wide
pointed to indirectly by <[src]> into a sequence of corresponding wide
characters and stores at most <[len]> of them in the wchar_t array pointed
characters and stores at most <[len]> of them in the wchar_t array pointed
to by <[dst]>, until it encounters a terminating null character ('\0').
to by <[dst]>, until it encounters a terminating null character ('\0').
 
 
If <[dst]> is NULL, no characters are stored.
If <[dst]> is NULL, no characters are stored.
 
 
If <[dst]> is not NULL, the pointer pointed to by <[src]> is updated to point
If <[dst]> is not NULL, the pointer pointed to by <[src]> is updated to point
to the character after the one that conversion stopped at.  If conversion
to the character after the one that conversion stopped at.  If conversion
stops because a null character is encountered, *<[src]> is set to NULL.
stops because a null character is encountered, *<[src]> is set to NULL.
 
 
The mbstate_t argument, <[ps]>, is used to keep track of the shift state.  If
The mbstate_t argument, <[ps]>, is used to keep track of the shift state.  If
it is NULL, <<mbsrtowcs>> uses an internal, static mbstate_t object, which
it is NULL, <<mbsrtowcs>> uses an internal, static mbstate_t object, which
is initialized to the initial conversion state at program startup.
is initialized to the initial conversion state at program startup.
 
 
The <<mbsnrtowcs>> function behaves identically to <<mbsrtowcs>>, except that
The <<mbsnrtowcs>> function behaves identically to <<mbsrtowcs>>, except that
conversion stops after reading at most <[nms]> bytes from the buffer pointed
conversion stops after reading at most <[nms]> bytes from the buffer pointed
to by <[src]>.
to by <[src]>.
 
 
RETURNS
RETURNS
The <<mbsrtowcs>> and <<mbsnrtowcs>> functions return the number of wide
The <<mbsrtowcs>> and <<mbsnrtowcs>> functions return the number of wide
characters stored in the array pointed to by <[dst]> if successful, otherwise
characters stored in the array pointed to by <[dst]> if successful, otherwise
it returns (size_t)-1.
it returns (size_t)-1.
 
 
PORTABILITY
PORTABILITY
<<mbsrtowcs>> is defined by the C99 standard.
<<mbsrtowcs>> is defined by the C99 standard.
<<mbsnrtowcs>> is defined by the POSIX.1-2008 standard.
<<mbsnrtowcs>> is defined by the POSIX.1-2008 standard.
*/
*/
 
 
#include <reent.h>
#include <reent.h>
#include <newlib.h>
#include <newlib.h>
#include <wchar.h>
#include <wchar.h>
#include <stdlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
#include <errno.h>
#include <errno.h>
 
 
size_t
size_t
_DEFUN (_mbsnrtowcs_r, (r, dst, src, nms, len, ps),
_DEFUN (_mbsnrtowcs_r, (r, dst, src, nms, len, ps),
        struct _reent *r _AND
        struct _reent *r _AND
        wchar_t *dst _AND
        wchar_t *dst _AND
        const char **src _AND
        const char **src _AND
        size_t nms _AND
        size_t nms _AND
        size_t len _AND
        size_t len _AND
        mbstate_t *ps)
        mbstate_t *ps)
{
{
  wchar_t *ptr = dst;
  wchar_t *ptr = dst;
  const char *tmp_src;
  const char *tmp_src;
  size_t max;
  size_t max;
  size_t count = 0;
  size_t count = 0;
  int bytes;
  int bytes;
 
 
#ifdef _MB_CAPABLE
#ifdef _MB_CAPABLE
  if (ps == NULL)
  if (ps == NULL)
    {
    {
      _REENT_CHECK_MISC(r);
      _REENT_CHECK_MISC(r);
      ps = &(_REENT_MBSRTOWCS_STATE(r));
      ps = &(_REENT_MBSRTOWCS_STATE(r));
    }
    }
#endif
#endif
 
 
  if (dst == NULL)
  if (dst == NULL)
    {
    {
      /* Ignore original len value and do not alter src pointer if the
      /* Ignore original len value and do not alter src pointer if the
         dst pointer is NULL.  */
         dst pointer is NULL.  */
      len = (size_t)-1;
      len = (size_t)-1;
      tmp_src = *src;
      tmp_src = *src;
      src = &tmp_src;
      src = &tmp_src;
    }
    }
 
 
  max = len;
  max = len;
  while (len > 0)
  while (len > 0)
    {
    {
      bytes = _mbrtowc_r (r, ptr, *src, nms, ps);
      bytes = _mbrtowc_r (r, ptr, *src, nms, ps);
      if (bytes > 0)
      if (bytes > 0)
        {
        {
          *src += bytes;
          *src += bytes;
          nms -= bytes;
          nms -= bytes;
          ++count;
          ++count;
          ptr = (dst == NULL) ? NULL : ptr + 1;
          ptr = (dst == NULL) ? NULL : ptr + 1;
          --len;
          --len;
        }
        }
      else if (bytes == -2)
      else if (bytes == -2)
        {
        {
          *src += nms;
          *src += nms;
          return count;
          return count;
        }
        }
      else if (bytes == 0)
      else if (bytes == 0)
        {
        {
          *src = NULL;
          *src = NULL;
          return count;
          return count;
        }
        }
      else
      else
        {
        {
          ps->__count = 0;
          ps->__count = 0;
          r->_errno = EILSEQ;
          r->_errno = EILSEQ;
          return (size_t)-1;
          return (size_t)-1;
        }
        }
    }
    }
 
 
  return (size_t)max;
  return (size_t)max;
}
}
 
 
#ifndef _REENT_ONLY
#ifndef _REENT_ONLY
size_t
size_t
_DEFUN (mbsnrtowcs, (dst, src, nms, len, ps),
_DEFUN (mbsnrtowcs, (dst, src, nms, len, ps),
        wchar_t *dst _AND
        wchar_t *dst _AND
        const char **src _AND
        const char **src _AND
        size_t nms _AND
        size_t nms _AND
        size_t len _AND
        size_t len _AND
        mbstate_t *ps)
        mbstate_t *ps)
{
{
  return _mbsnrtowcs_r (_REENT, dst, src, nms, len, ps);
  return _mbsnrtowcs_r (_REENT, dst, src, nms, len, ps);
}
}
#endif /* !_REENT_ONLY */
#endif /* !_REENT_ONLY */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.