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/] [wcstombs.c] - Diff between revs 207 and 345

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

Rev 207 Rev 345
/*
/*
FUNCTION
FUNCTION
<<wcstombs>>---minimal wide char string to multibyte string converter
<<wcstombs>>---minimal wide char string to multibyte string converter
 
 
INDEX
INDEX
        wcstombs
        wcstombs
 
 
ANSI_SYNOPSIS
ANSI_SYNOPSIS
        #include <stdlib.h>
        #include <stdlib.h>
        size_t wcstombs(char *<[s]>, const wchar_t *<[pwc]>, size_t <[n]>);
        size_t wcstombs(char *<[s]>, const wchar_t *<[pwc]>, size_t <[n]>);
 
 
TRAD_SYNOPSIS
TRAD_SYNOPSIS
        #include <stdlib.h>
        #include <stdlib.h>
        size_t wcstombs(<[s]>, <[pwc]>, <[n]>)
        size_t wcstombs(<[s]>, <[pwc]>, <[n]>)
        char *<[s]>;
        char *<[s]>;
        const wchar_t *<[pwc]>;
        const wchar_t *<[pwc]>;
        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 <<wcstombs>>.  In this case,
implementation of <<wcstombs>>.  In this case,
all wide-characters are expected to represent single bytes and so
all wide-characters are expected to represent single bytes and so
are converted simply by casting to char.
are converted simply by casting to char.
 
 
When _MB_CAPABLE is defined, this routine calls <<_wcstombs_r>> to perform
When _MB_CAPABLE is defined, this routine calls <<_wcstombs_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 <<wcstombs>> returns <<0>> if
This implementation of <<wcstombs>> 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
wide-char characters does not represent a valid multi-byte character;
wide-char characters does not represent a valid multi-byte character;
otherwise it returns the minimum of: <<n>> or the
otherwise it returns the minimum of: <<n>> or the
number of bytes that are transferred to <<s>>, not including the
number of bytes that are transferred to <<s>>, not including the
nul terminator.
nul terminator.
 
 
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 if
string will be modified to contain a wchar_t nul terminator if
<<n>> > 0.
<<n>> > 0.
 
 
PORTABILITY
PORTABILITY
<<wcstombs>> is required in the ANSI C standard.  However, the precise
<<wcstombs>> is required in the ANSI C standard.  However, the precise
effects vary with the locale.
effects vary with the locale.
 
 
<<wcstombs>> requires no supporting OS subroutines.
<<wcstombs>> 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 (wcstombs, (s, pwcs, n),
_DEFUN (wcstombs, (s, pwcs, n),
        char          *s    _AND
        char          *s    _AND
        const wchar_t *pwcs _AND
        const wchar_t *pwcs _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 _wcstombs_r (_REENT, s, pwcs, n, &state);
  return _wcstombs_r (_REENT, s, pwcs, 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 ((*s++ = (char) *pwcs++) == 0)
      if ((*s++ = (char) *pwcs++) == 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.