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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.17.0/] [newlib/] [libc/] [stdio/] [ungetwc.c] - Diff between revs 148 and 158

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

Rev 148 Rev 158
/*-
/*-
 * Copyright (c) 2002-2004 Tim J. Robbins.
 * Copyright (c) 2002-2004 Tim J. Robbins.
 * All rights reserved.
 * All rights reserved.
 *
 *
 * Redistribution and use in source and binary forms, with or without
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * modification, are permitted provided that the following conditions
 * are met:
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *    documentation and/or other materials provided with the distribution.
 *
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * SUCH DAMAGE.
 */
 */
 
 
/*
/*
FUNCTION
FUNCTION
<<ungetwc>>---push wide character data back into a stream
<<ungetwc>>---push wide character data back into a stream
 
 
INDEX
INDEX
        ungetwc
        ungetwc
INDEX
INDEX
        _ungetwc_r
        _ungetwc_r
 
 
ANSI_SYNOPSIS
ANSI_SYNOPSIS
        #include <stdio.h>
        #include <stdio.h>
        #include <wchar.h>
        #include <wchar.h>
        wint_t ungetwc(wint_t <[wc]>, FILE *<[stream]>);
        wint_t ungetwc(wint_t <[wc]>, FILE *<[stream]>);
 
 
        wint_t _ungetwc_r(struct _reent *<[reent]>, wint_t <[wc]>, FILE *<[stream]>);
        wint_t _ungetwc_r(struct _reent *<[reent]>, wint_t <[wc]>, FILE *<[stream]>);
 
 
DESCRIPTION
DESCRIPTION
<<ungetwc>> is used to return wide characters back to <[stream]> to be
<<ungetwc>> is used to return wide characters back to <[stream]> to be
read again.  If <[wc]> is WEOF, the stream is unchanged.  Otherwise, the
read again.  If <[wc]> is WEOF, the stream is unchanged.  Otherwise, the
wide character <[wc]> is put back on the stream, and subsequent reads will see
wide character <[wc]> is put back on the stream, and subsequent reads will see
the wide chars pushed back in reverse order.  Pushed wide chars are lost if the
the wide chars pushed back in reverse order.  Pushed wide chars are lost if the
stream is repositioned, such as by <<fseek>>, <<fsetpos>>, or
stream is repositioned, such as by <<fseek>>, <<fsetpos>>, or
<<rewind>>.
<<rewind>>.
 
 
The underlying file is not changed, but it is possible to push back
The underlying file is not changed, but it is possible to push back
something different than what was originally read.  Ungetting a
something different than what was originally read.  Ungetting a
character will clear the end-of-stream marker, and decrement the file
character will clear the end-of-stream marker, and decrement the file
position indicator.  Pushing back beyond the beginning of a file gives
position indicator.  Pushing back beyond the beginning of a file gives
unspecified behavior.
unspecified behavior.
 
 
The alternate function <<_ungetwc_r>> is a reentrant version.  The
The alternate function <<_ungetwc_r>> is a reentrant version.  The
extra argument <[reent]> is a pointer to a reentrancy structure.
extra argument <[reent]> is a pointer to a reentrancy structure.
 
 
RETURNS
RETURNS
The wide character pushed back, or <<WEOF>> on error.
The wide character pushed back, or <<WEOF>> on error.
 
 
PORTABILITY
PORTABILITY
C99
C99
*/
*/
 
 
#include <_ansi.h>
#include <_ansi.h>
#include <reent.h>
#include <reent.h>
#include <errno.h>
#include <errno.h>
#include <limits.h>
#include <limits.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <wchar.h>
#include <wchar.h>
#include "local.h"
#include "local.h"
 
 
wint_t
wint_t
_DEFUN(_ungetwc_r, (ptr, wc, fp),
_DEFUN(_ungetwc_r, (ptr, wc, fp),
        struct _reent *ptr _AND
        struct _reent *ptr _AND
        wint_t wc _AND
        wint_t wc _AND
        register FILE *fp)
        register FILE *fp)
{
{
  char buf[MB_LEN_MAX];
  char buf[MB_LEN_MAX];
  size_t len;
  size_t len;
 
 
  _flockfile (fp);
  _flockfile (fp);
  ORIENT (fp, 1);
  ORIENT (fp, 1);
  if (wc == WEOF)
  if (wc == WEOF)
    wc = WEOF;
    wc = WEOF;
  else if ((len = _wcrtomb_r(ptr, buf, wc, &fp->_mbstate)) == (size_t)-1)
  else if ((len = _wcrtomb_r(ptr, buf, wc, &fp->_mbstate)) == (size_t)-1)
    {
    {
      fp->_flags |= __SERR;
      fp->_flags |= __SERR;
      wc = WEOF;
      wc = WEOF;
    }
    }
  else
  else
    while (len-- != 0)
    while (len-- != 0)
      if (_ungetc_r(ptr, (unsigned char)buf[len], fp) == EOF)
      if (_ungetc_r(ptr, (unsigned char)buf[len], fp) == EOF)
        {
        {
          wc = WEOF;
          wc = WEOF;
          break;
          break;
        }
        }
  _funlockfile (fp);
  _funlockfile (fp);
  return wc;
  return wc;
}
}
 
 
/*
/*
 * MT-safe version.
 * MT-safe version.
 */
 */
wint_t
wint_t
_DEFUN(ungetwc, (wint_t wc, FILE *fp),
_DEFUN(ungetwc, (wint_t wc, FILE *fp),
        wint_t wc _AND
        wint_t wc _AND
        FILE *fp)
        FILE *fp)
{
{
  CHECK_INIT (_REENT, fp);
  CHECK_INIT (_REENT, fp);
  return _ungetwc_r (_REENT, wc, fp);
  return _ungetwc_r (_REENT, wc, fp);
}
}
 
 

powered by: WebSVN 2.1.0

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