4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-15 19:09:58 +08:00
Jeff Johnston ed6859b8f0 2004-09-16 Antony King <antony.king@st.com>
* libc/include/sys/lock.h: Replaced empty {} with (0) to conform
        with locking API.
        * libc/include/sys/stdio.h: (_flockfile)[!_SINGLE_THREAD]: Add
        check for__SSTR in _flags and if set, skip lock request.
        (_funlockfile)[!SINGLE_THREAD]: Ditto.
        * libc/stdio/local.h (CHECK_INIT): Added check that _REENT is
        not NULL.
        * libc/stdio/siprintf.c (siprintf, _siprintf_r): Added missing
        initialisation of _file to -1 in local FILE.
        * libc/stdio/snprintf.c (snprintf, _snprintf_r): Ditto.
        * libc/stdio/sscanf.c (sscanf, _sscanf_r): Ditto.
        * libc/stdio/vsnprintf.c (vsnprintf, _vsnprintf_r): Ditto.
        * libc/stdio/vsscanf.c (_vsscanf_r): Ditto.
        * libc/stdio/sscanf.c (sscanf, _sscanf_r): Added __SSTR flag to
        _flags in local FILE to prevent locking.
        * libc/stdio/vsscanf.c (_vsscanf_r): Ditto.
2004-09-16 21:30:51 +00:00

104 lines
2.4 KiB
C

/*
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/* doc in sprintf.c */
/* This code created by modifying sprintf.c so copyright inherited. */
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#ifdef _HAVE_STDC
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#include <limits.h>
#include "local.h"
int
#ifdef _HAVE_STDC
_DEFUN(_snprintf_r, (ptr, str, size, fmt),
struct _reent *ptr _AND
char *str _AND
size_t size _AND
_CONST char *fmt _DOTS)
#else
_snprintf_r(ptr, str, size, fmt, va_alist)
struct _reent *ptr;
char *str;
size_t size;
_CONST char *fmt;
va_dcl
#endif
{
int ret;
va_list ap;
FILE f;
f._flags = __SWR | __SSTR;
f._bf._base = f._p = (unsigned char *) str;
f._bf._size = f._w = (size > 0 ? size - 1 : 0);
f._file = -1; /* No file. */
#ifdef _HAVE_STDC
va_start (ap, fmt);
#else
va_start (ap);
#endif
ret = _vfprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (size > 0)
*f._p = 0;
return (ret);
}
#ifndef _REENT_ONLY
int
#ifdef _HAVE_STDC
_DEFUN(snprintf, (str, size, fmt),
char *str _AND
size_t size _AND
_CONST char *fmt _DOTS)
#else
snprintf(str, size, fmt, va_alist)
char *str;
size_t size;
_CONST char *fmt;
va_dcl
#endif
{
int ret;
va_list ap;
FILE f;
f._flags = __SWR | __SSTR;
f._bf._base = f._p = (unsigned char *) str;
f._bf._size = f._w = (size > 0 ? size - 1 : 0);
f._file = -1; /* No file. */
#ifdef _HAVE_STDC
va_start (ap, fmt);
#else
va_start (ap);
#endif
ret = _vfprintf_r (_REENT, &f, fmt, ap);
va_end (ap);
if (size > 0)
*f._p = 0;
return (ret);
}
#endif