OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

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

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

Rev 207 Rev 345
/*
/*
FUNCTION
FUNCTION
<<mbstowcs>>---minimal multibyte string to wide char converter
<<mbstowcs>>---minimal multibyte string to wide char converter
 
 
INDEX
INDEX
        mbstowcs
        mbstowcs
 
 
ANSI_SYNOPSIS
ANSI_SYNOPSIS
        #include <stdlib.h>
        #include <stdlib.h>
        int mbstowcs(wchar_t *<[pwc]>, const char *<[s]>, size_t <[n]>);
        int mbstowcs(wchar_t *<[pwc]>, const char *<[s]>, size_t <[n]>);
 
 
TRAD_SYNOPSIS
TRAD_SYNOPSIS
        #include <stdlib.h>
        #include <stdlib.h>
        int mbstowcs(<[pwc]>, <[s]>, <[n]>)
        int mbstowcs(<[pwc]>, <[s]>, <[n]>)
        wchar_t *<[pwc]>;
        wchar_t *<[pwc]>;
        const char *<[s]>;
        const char *<[s]>;
        size_t <[n]>;
        size_t <[n]>;
 
 
DESCRIPTION
DESCRIPTION
When _MB_CAPABLE is not defined, this is a minimal ANSI-conforming
When _MB_CAPABLE is not defined, this is a minimal ANSI-conforming
implementation of <<mbstowcs>>.  In this case, the
implementation of <<mbstowcs>>.  In this case, the
only ``multi-byte character sequences'' recognized are single bytes,
only ``multi-byte character sequences'' recognized are single bytes,
and they are ``converted'' to wide-char versions simply by byte
and they are ``converted'' to wide-char versions simply by byte
extension.
extension.
 
 
When _MB_CAPABLE is defined, this routine calls <<_mbstowcs_r>> to perform
When _MB_CAPABLE is defined, this routine calls <<_mbstowcs_r>> to perform
the conversion, passing a state variable to allow state dependent
the conversion, passing a state variable to allow state dependent
decoding.  The result is based on the locale setting which may
decoding.  The result is based on the locale setting which may
be restricted to a defined set of locales.
be restricted to a defined set of locales.
 
 
RETURNS
RETURNS
This implementation of <<mbstowcs>> returns <<0>> if
This implementation of <<mbstowcs>> returns <<0>> if
<[s]> is <<NULL>> or is the empty string;
<[s]> is <<NULL>> or is the empty string;
it returns <<-1>> if _MB_CAPABLE and one of the
it returns <<-1>> if _MB_CAPABLE and one of the
multi-byte characters is invalid or incomplete;
multi-byte characters is invalid or incomplete;
otherwise it returns the minimum of: <<n>> or the
otherwise it returns the minimum of: <<n>> or the
number of multi-byte characters in <<s>> plus 1 (to
number of multi-byte characters in <<s>> plus 1 (to
compensate for the nul character).
compensate for the nul character).
If the return value is -1, the state of the <<pwc>> string is
If the return value is -1, the state of the <<pwc>> string is
indeterminate.  If the input has a length of 0, the output
indeterminate.  If the input has a length of 0, the output
string will be modified to contain a wchar_t nul terminator.
string will be modified to contain a wchar_t nul terminator.
 
 
PORTABILITY
PORTABILITY
<<mbstowcs>> is required in the ANSI C standard.  However, the precise
<<mbstowcs>> is required in the ANSI C standard.  However, the precise
effects vary with the locale.
effects vary with the locale.
 
 
<<mbstowcs>> requires no supporting OS subroutines.
<<mbstowcs>> requires no supporting OS subroutines.
*/
*/
 
 
#ifndef _REENT_ONLY
#ifndef _REENT_ONLY
 
 
#include <newlib.h>
#include <newlib.h>
#include <stdlib.h>
#include <stdlib.h>
#include <wchar.h>
#include <wchar.h>
 
 
size_t
size_t
_DEFUN (mbstowcs, (pwcs, s, n),
_DEFUN (mbstowcs, (pwcs, s, n),
        wchar_t *pwcs _AND
        wchar_t *pwcs _AND
        const char *s _AND
        const char *s _AND
        size_t n)
        size_t n)
{
{
#ifdef _MB_CAPABLE
#ifdef _MB_CAPABLE
  mbstate_t state;
  mbstate_t state;
  state.__count = 0;
  state.__count = 0;
 
 
  return _mbstowcs_r (_REENT, pwcs, s, n, &state);
  return _mbstowcs_r (_REENT, pwcs, s, n, &state);
#else /* not _MB_CAPABLE */
#else /* not _MB_CAPABLE */
 
 
  int count = 0;
  int count = 0;
 
 
  if (n != 0) {
  if (n != 0) {
    do {
    do {
      if ((*pwcs++ = (wchar_t) *s++) == 0)
      if ((*pwcs++ = (wchar_t) *s++) == 0)
        break;
        break;
      count++;
      count++;
    } while (--n != 0);
    } while (--n != 0);
  }
  }
 
 
  return count;
  return count;
#endif /* not _MB_CAPABLE */
#endif /* not _MB_CAPABLE */
}
}
 
 
#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.