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.0rc2/] [newlib/] [libc/] [stdlib/] [mbtowc.c] - Diff between revs 207 and 520

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

Rev 207 Rev 520
/*
/*
FUNCTION
FUNCTION
<<mbtowc>>---minimal multibyte to wide char converter
<<mbtowc>>---minimal multibyte to wide char converter
 
 
INDEX
INDEX
        mbtowc
        mbtowc
 
 
ANSI_SYNOPSIS
ANSI_SYNOPSIS
        #include <stdlib.h>
        #include <stdlib.h>
        int mbtowc(wchar_t *<[pwc]>, const char *<[s]>, size_t <[n]>);
        int mbtowc(wchar_t *<[pwc]>, const char *<[s]>, size_t <[n]>);
 
 
TRAD_SYNOPSIS
TRAD_SYNOPSIS
        #include <stdlib.h>
        #include <stdlib.h>
        int mbtowc(<[pwc]>, <[s]>, <[n]>)
        int mbtowc(<[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 <<mbtowc>>.  In this case,
implementation of <<mbtowc>>.  In this case,
only ``multi-byte character sequences'' recognized are single bytes,
only ``multi-byte character sequences'' recognized are single bytes,
and they are ``converted'' to themselves.
and they are ``converted'' to themselves.
Each call to <<mbtowc>> copies one character from <<*<[s]>>> to
Each call to <<mbtowc>> copies one character from <<*<[s]>>> to
<<*<[pwc]>>>, unless <[s]> is a null pointer.  The argument n
<<*<[pwc]>>>, unless <[s]> is a null pointer.  The argument n
is ignored.
is ignored.
 
 
When _MB_CAPABLE is defined, this routine calls <<_mbtowc_r>> to perform
When _MB_CAPABLE is defined, this routine calls <<_mbtowc_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 <<mbtowc>> returns <<0>> if
This implementation of <<mbtowc>> returns <<0>> if
<[s]> is <<NULL>> or is the empty string;
<[s]> is <<NULL>> or is the empty string;
it returns <<1>> if not _MB_CAPABLE or
it returns <<1>> if not _MB_CAPABLE or
the character is a single-byte character; it returns <<-1>>
the character is a single-byte character; it returns <<-1>>
if n is <<0>> or the multi-byte character is invalid;
if n is <<0>> or the multi-byte character is invalid;
otherwise it returns the number of bytes in the multibyte character.
otherwise it returns the number of bytes in the multibyte character.
If the return value is -1, no changes are made to the <<pwc>>
If the return value is -1, no changes are made to the <<pwc>>
output string.  If the input is the empty string, a wchar_t nul
output string.  If the input is the empty string, a wchar_t nul
is placed in the output string and 0 is returned.  If the input
is placed in the output string and 0 is returned.  If the input
has a length of 0, no changes are made to the <<pwc>> output string.
has a length of 0, no changes are made to the <<pwc>> output string.
 
 
PORTABILITY
PORTABILITY
<<mbtowc>> is required in the ANSI C standard.  However, the precise
<<mbtowc>> is required in the ANSI C standard.  However, the precise
effects vary with the locale.
effects vary with the locale.
 
 
<<mbtowc>> requires no supporting OS subroutines.
<<mbtowc>> 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>
#include "local.h"
#include "local.h"
 
 
int
int
_DEFUN (mbtowc, (pwc, s, n),
_DEFUN (mbtowc, (pwc, s, n),
        wchar_t *pwc _AND
        wchar_t *pwc _AND
        const char *s _AND
        const char *s _AND
        size_t n)
        size_t n)
{
{
#ifdef _MB_CAPABLE
#ifdef _MB_CAPABLE
  int retval = 0;
  int retval = 0;
  mbstate_t *ps;
  mbstate_t *ps;
 
 
  _REENT_CHECK_MISC(_REENT);
  _REENT_CHECK_MISC(_REENT);
  ps = &(_REENT_MBTOWC_STATE(_REENT));
  ps = &(_REENT_MBTOWC_STATE(_REENT));
 
 
  retval = __mbtowc (_REENT, pwc, s, n, __locale_charset (), ps);
  retval = __mbtowc (_REENT, pwc, s, n, __locale_charset (), ps);
 
 
  if (retval < 0)
  if (retval < 0)
    {
    {
      ps->__count = 0;
      ps->__count = 0;
      return -1;
      return -1;
    }
    }
  return retval;
  return retval;
#else /* not _MB_CAPABLE */
#else /* not _MB_CAPABLE */
  if (s == NULL)
  if (s == NULL)
    return 0;
    return 0;
  if (n == 0)
  if (n == 0)
    return -1;
    return -1;
  if (pwc)
  if (pwc)
    *pwc = (wchar_t) *s;
    *pwc = (wchar_t) *s;
  return (*s != '\0');
  return (*s != '\0');
#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.