2006-09-26 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/stdio.h[_REENT_SMALL]: Do not allow macros for clearerr, feof, or fileno. * libc/include/sys/reent.h[_REENT_SMALL](struct _reent): Change the dummy std stream scheme to use pointers to const external fake files, one for each standard stream. * libc/stdio/local.h (CHECK_INIT): Change to take a file pointer argument. For _REENT_SMALL, reset the file pointer if it matches one of the fake std stream pointers. * libc/stdio/clearerr.c: Fix CHECK_INIT macro to add file pointer argument. * libc/stdio/fclose.c: Ditto. * libc/stdio/feof.c: Ditto. * libc/stdio/ferror.c: Ditto. * libc/stdio/fflush.c: Ditto. * libc/stdio/fgetc.c: Ditto. * libc/stdio/fgets.c: Ditto. * libc/stdio/fileno.c: Ditto. * libc/stdio/findfp.c: Ditto. * libc/stdio/fputc.c: Ditto. * libc/stdio/fputs.c: Ditto. * libc/stdio/fread.c: Ditto. * libc/stdio/freopen.c: Ditto. * libc/stdio/fseek.c: Ditto. * libc/stdio/ftell.c: Ditto. * libc/stdio/fwrite.c: Ditto. * libc/stdio/getc.c: Ditto. * libc/stdio/getdelim.c: Ditto. * libc/stdio/putc.c: Ditto. * libc/stdio/refill.c: Ditto. * libc/stdio/setvbuf.c: Ditto. * libc/stdio/ungetc.c: Ditto. * libc/stdio/vfprintf.c: Ditto. * libc/stdio/vfscanf.c: Ditto. * libc/stdio/wbuf.c: Ditto.: Ditto. * libc/stdio/wsetup.c: Ditto. * libc/stdio64/freopen64.c: Ditto. * libc/stdio64/fseeko64.c: Ditto. * libc/stdio64/ftello64.c: Ditto. * libc/machine/powerpc/vfprintf.c: Ditto. * libc/machine/powerpc/vfscanf.c: Ditto.
This commit is contained in:
parent
1aeca89244
commit
e5e148d15b
|
@ -1,3 +1,46 @@
|
||||||
|
2006-09-26 Jeff Johnston <jjohnstn@redhat.com>
|
||||||
|
|
||||||
|
* libc/include/stdio.h[_REENT_SMALL]: Do not allow macros
|
||||||
|
for clearerr, feof, or fileno.
|
||||||
|
* libc/include/sys/reent.h[_REENT_SMALL](struct _reent): Change
|
||||||
|
the dummy std stream scheme to use pointers to const external
|
||||||
|
fake files, one for each standard stream.
|
||||||
|
* libc/stdio/local.h (CHECK_INIT): Change to take a file pointer
|
||||||
|
argument. For _REENT_SMALL, reset the file pointer if it
|
||||||
|
matches one of the fake std stream pointers.
|
||||||
|
* libc/stdio/clearerr.c: Fix CHECK_INIT macro to add file pointer
|
||||||
|
argument.
|
||||||
|
* libc/stdio/fclose.c: Ditto.
|
||||||
|
* libc/stdio/feof.c: Ditto.
|
||||||
|
* libc/stdio/ferror.c: Ditto.
|
||||||
|
* libc/stdio/fflush.c: Ditto.
|
||||||
|
* libc/stdio/fgetc.c: Ditto.
|
||||||
|
* libc/stdio/fgets.c: Ditto.
|
||||||
|
* libc/stdio/fileno.c: Ditto.
|
||||||
|
* libc/stdio/findfp.c: Ditto.
|
||||||
|
* libc/stdio/fputc.c: Ditto.
|
||||||
|
* libc/stdio/fputs.c: Ditto.
|
||||||
|
* libc/stdio/fread.c: Ditto.
|
||||||
|
* libc/stdio/freopen.c: Ditto.
|
||||||
|
* libc/stdio/fseek.c: Ditto.
|
||||||
|
* libc/stdio/ftell.c: Ditto.
|
||||||
|
* libc/stdio/fwrite.c: Ditto.
|
||||||
|
* libc/stdio/getc.c: Ditto.
|
||||||
|
* libc/stdio/getdelim.c: Ditto.
|
||||||
|
* libc/stdio/putc.c: Ditto.
|
||||||
|
* libc/stdio/refill.c: Ditto.
|
||||||
|
* libc/stdio/setvbuf.c: Ditto.
|
||||||
|
* libc/stdio/ungetc.c: Ditto.
|
||||||
|
* libc/stdio/vfprintf.c: Ditto.
|
||||||
|
* libc/stdio/vfscanf.c: Ditto.
|
||||||
|
* libc/stdio/wbuf.c: Ditto.: Ditto.
|
||||||
|
* libc/stdio/wsetup.c: Ditto.
|
||||||
|
* libc/stdio64/freopen64.c: Ditto.
|
||||||
|
* libc/stdio64/fseeko64.c: Ditto.
|
||||||
|
* libc/stdio64/ftello64.c: Ditto.
|
||||||
|
* libc/machine/powerpc/vfprintf.c: Ditto.
|
||||||
|
* libc/machine/powerpc/vfscanf.c: Ditto.
|
||||||
|
|
||||||
2006-09-22 Paul Brook <paul@codesourcery.com>
|
2006-09-22 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
* libc/include/sys/reent.h: Define and use __reent_assert.
|
* libc/include/sys/reent.h: Define and use __reent_assert.
|
||||||
|
|
|
@ -455,9 +455,11 @@ static __inline int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
|
||||||
#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
|
#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
|
||||||
#define __sfileno(p) ((p)->_file)
|
#define __sfileno(p) ((p)->_file)
|
||||||
|
|
||||||
|
#ifndef _REENT_SMALL
|
||||||
#define feof(p) __sfeof(p)
|
#define feof(p) __sfeof(p)
|
||||||
#define ferror(p) __sferror(p)
|
#define ferror(p) __sferror(p)
|
||||||
#define clearerr(p) __sclearerr(p)
|
#define clearerr(p) __sclearerr(p)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */
|
#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */
|
||||||
#define fileno(p) __sfileno(p)
|
#define fileno(p) __sfileno(p)
|
||||||
|
|
|
@ -13,6 +13,8 @@ extern "C" {
|
||||||
#include <_ansi.h>
|
#include <_ansi.h>
|
||||||
#include <sys/_types.h>
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#define _NULL 0
|
||||||
|
|
||||||
#ifndef __Long
|
#ifndef __Long
|
||||||
#if __LONG_MAX__ == 2147483647L
|
#if __LONG_MAX__ == 2147483647L
|
||||||
#define __Long long
|
#define __Long long
|
||||||
|
@ -157,8 +159,8 @@ struct __sFILE_fake {
|
||||||
|
|
||||||
struct _reent *_data;
|
struct _reent *_data;
|
||||||
};
|
};
|
||||||
/* CHECK_INIT() comes from stdio/local.h; be sure to include that. */
|
/* CHECK_STD_INIT() comes from stdio/local.h; be sure to include that. */
|
||||||
# define _REENT_SMALL_CHECK_INIT(ptr) CHECK_INIT(ptr)
|
# define _REENT_SMALL_CHECK_INIT(ptr) CHECK_STD_INIT(ptr)
|
||||||
#else
|
#else
|
||||||
# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
|
# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
|
||||||
#endif
|
#endif
|
||||||
|
@ -382,15 +384,18 @@ struct _reent
|
||||||
|
|
||||||
struct _glue __sglue; /* root of glue chain */
|
struct _glue __sglue; /* root of glue chain */
|
||||||
__FILE *__sf; /* file descriptors */
|
__FILE *__sf; /* file descriptors */
|
||||||
struct __sFILE_fake __sf_fake; /* fake initial stdin/out/err */
|
|
||||||
struct _misc_reent *_misc; /* strtok, multibyte states */
|
struct _misc_reent *_misc; /* strtok, multibyte states */
|
||||||
char *_signal_buf; /* strsignal */
|
char *_signal_buf; /* strsignal */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern const struct __sFILE_fake __sf_fake_stdin;
|
||||||
|
extern const struct __sFILE_fake __sf_fake_stdout;
|
||||||
|
extern const struct __sFILE_fake __sf_fake_stderr;
|
||||||
|
|
||||||
#define _REENT_INIT(var) \
|
#define _REENT_INIT(var) \
|
||||||
{ (__FILE *)&var.__sf_fake, \
|
{ (__FILE *)&__sf_fake_stdin, \
|
||||||
(__FILE *)&var.__sf_fake, \
|
(__FILE *)&__sf_fake_stdout, \
|
||||||
(__FILE *)&var.__sf_fake, \
|
(__FILE *)&__sf_fake_stderr, \
|
||||||
0, \
|
0, \
|
||||||
0, \
|
0, \
|
||||||
_NULL, \
|
_NULL, \
|
||||||
|
@ -410,15 +415,14 @@ struct _reent
|
||||||
{_NULL, 0, {_NULL}, _NULL}, \
|
{_NULL, 0, {_NULL}, _NULL}, \
|
||||||
{_NULL, 0, _NULL}, \
|
{_NULL, 0, _NULL}, \
|
||||||
_NULL, \
|
_NULL, \
|
||||||
{_NULL, 0, 0, 0, 0, {_NULL, 0}, 0, _NULL}, \
|
|
||||||
_NULL, \
|
_NULL, \
|
||||||
_NULL \
|
_NULL \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _REENT_INIT_PTR(var) \
|
#define _REENT_INIT_PTR(var) \
|
||||||
{ var->_stdin = (__FILE *)&var->__sf_fake; \
|
{ var->_stdin = (__FILE *)&__sf_fake_stdin; \
|
||||||
var->_stdout = (__FILE *)&var->__sf_fake; \
|
var->_stdout = (__FILE *)&__sf_fake_stdout; \
|
||||||
var->_stderr = (__FILE *)&var->__sf_fake; \
|
var->_stderr = (__FILE *)&__sf_fake_stderr; \
|
||||||
var->_errno = 0; \
|
var->_errno = 0; \
|
||||||
var->_inc = 0; \
|
var->_inc = 0; \
|
||||||
var->_emergency = _NULL; \
|
var->_emergency = _NULL; \
|
||||||
|
@ -443,15 +447,6 @@ struct _reent
|
||||||
var->__sglue._niobs = 0; \
|
var->__sglue._niobs = 0; \
|
||||||
var->__sglue._iobs = _NULL; \
|
var->__sglue._iobs = _NULL; \
|
||||||
var->__sf = 0; \
|
var->__sf = 0; \
|
||||||
var->__sf_fake._p = _NULL; \
|
|
||||||
var->__sf_fake._r = 0; \
|
|
||||||
var->__sf_fake._w = 0; \
|
|
||||||
var->__sf_fake._flags = 0; \
|
|
||||||
var->__sf_fake._file = 0; \
|
|
||||||
var->__sf_fake._bf._base = _NULL; \
|
|
||||||
var->__sf_fake._bf._size = 0; \
|
|
||||||
var->__sf_fake._lbfsize = 0; \
|
|
||||||
var->__sf_fake._data = _NULL; \
|
|
||||||
var->_misc = _NULL; \
|
var->_misc = _NULL; \
|
||||||
var->_signal_buf = _NULL; \
|
var->_signal_buf = _NULL; \
|
||||||
}
|
}
|
||||||
|
@ -786,8 +781,6 @@ struct _reent
|
||||||
|
|
||||||
#endif /* !_REENT_SMALL */
|
#endif /* !_REENT_SMALL */
|
||||||
|
|
||||||
#define _NULL 0
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All references to struct _reent are via this pointer.
|
* All references to struct _reent are via this pointer.
|
||||||
* Internally, newlib routines that need to reference it should use _REENT.
|
* Internally, newlib routines that need to reference it should use _REENT.
|
||||||
|
|
|
@ -321,7 +321,7 @@ _DEFUN (VFPRINTF, (fp, fmt0, ap),
|
||||||
_CONST char *fmt0 _AND
|
_CONST char *fmt0 _AND
|
||||||
va_list ap)
|
va_list ap)
|
||||||
{
|
{
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
return _VFPRINTF_R (_REENT, fp, fmt0, ap);
|
return _VFPRINTF_R (_REENT, fp, fmt0, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -875,7 +875,9 @@ reswitch: switch (ch) {
|
||||||
if (prec || flags & ALT)
|
if (prec || flags & ALT)
|
||||||
size += prec + 1;
|
size += prec + 1;
|
||||||
} else /* "0.X" */
|
} else /* "0.X" */
|
||||||
size = prec + 2;
|
size = (prec || flags & ALT)
|
||||||
|
? prec + 2
|
||||||
|
: 1;
|
||||||
} else if (expt >= ndig) { /* fixed g fmt */
|
} else if (expt >= ndig) { /* fixed g fmt */
|
||||||
size = expt;
|
size = expt;
|
||||||
if (flags & ALT)
|
if (flags & ALT)
|
||||||
|
|
|
@ -224,7 +224,7 @@ _DEFUN (vfscanf, (fp, fmt, ap),
|
||||||
_CONST char *fmt _AND
|
_CONST char *fmt _AND
|
||||||
va_list ap)
|
va_list ap)
|
||||||
{
|
{
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, fp);
|
||||||
return __svfscanf_r (_REENT, fp, fmt, ap);
|
return __svfscanf_r (_REENT, fp, fmt, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ _VOID
|
||||||
_DEFUN(clearerr, (fp),
|
_DEFUN(clearerr, (fp),
|
||||||
FILE * fp)
|
FILE * fp)
|
||||||
{
|
{
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
__sclearerr (fp);
|
__sclearerr (fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
|
@ -76,7 +76,7 @@ _DEFUN(_fclose_r, (rptr, fp),
|
||||||
|
|
||||||
__sfp_lock_acquire ();
|
__sfp_lock_acquire ();
|
||||||
|
|
||||||
CHECK_INIT (rptr);
|
CHECK_INIT (rptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ _DEFUN(feof, (fp),
|
||||||
FILE * fp)
|
FILE * fp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sfeof (fp);
|
result = __sfeof (fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
|
@ -66,7 +66,7 @@ _DEFUN(ferror, (fp),
|
||||||
FILE * fp)
|
FILE * fp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sferror (fp);
|
result = __sferror (fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
|
@ -67,7 +67,7 @@ _DEFUN(fflush, (fp),
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return _fwalk (_GLOBAL_REENT, fflush);
|
return _fwalk (_GLOBAL_REENT, fflush);
|
||||||
|
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ _DEFUN(_fgetc_r, (ptr, fp),
|
||||||
FILE * fp)
|
FILE * fp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT(ptr);
|
CHECK_INIT(ptr, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sgetc_r (ptr, fp);
|
result = __sgetc_r (ptr, fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
@ -92,7 +92,7 @@ _DEFUN(fgetc, (fp),
|
||||||
{
|
{
|
||||||
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
|
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sgetc_r (_REENT, fp);
|
result = __sgetc_r (_REENT, fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
|
@ -96,7 +96,7 @@ _DEFUN(_fgets_r, (ptr, buf, n, fp),
|
||||||
|
|
||||||
s = buf;
|
s = buf;
|
||||||
|
|
||||||
CHECK_INIT(ptr);
|
CHECK_INIT(ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
#ifdef __SCLE
|
#ifdef __SCLE
|
||||||
|
|
|
@ -54,7 +54,7 @@ _DEFUN(fileno, (f),
|
||||||
FILE * f)
|
FILE * f)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, f);
|
||||||
_flockfile (f);
|
_flockfile (f);
|
||||||
result = __sfileno (f);
|
result = __sfileno (f);
|
||||||
_funlockfile (f);
|
_funlockfile (f);
|
||||||
|
|
|
@ -26,6 +26,15 @@
|
||||||
#include <sys/lock.h>
|
#include <sys/lock.h>
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
|
#ifdef _REENT_SMALL
|
||||||
|
const struct __sFILE_fake __sf_fake_stdin =
|
||||||
|
{_NULL, 0, 0, 0, 0, {_NULL, 0}, 0, _NULL};
|
||||||
|
const struct __sFILE_fake __sf_fake_stdout =
|
||||||
|
{_NULL, 0, 0, 0, 0, {_NULL, 0}, 0, _NULL};
|
||||||
|
const struct __sFILE_fake __sf_fake_stderr =
|
||||||
|
{_NULL, 0, 0, 0, 0, {_NULL, 0}, 0, _NULL};
|
||||||
|
#endif
|
||||||
|
|
||||||
static _VOID
|
static _VOID
|
||||||
_DEFUN(std, (ptr, flags, file, data),
|
_DEFUN(std, (ptr, flags, file, data),
|
||||||
FILE *ptr _AND
|
FILE *ptr _AND
|
||||||
|
|
|
@ -82,7 +82,7 @@ _DEFUN(_fputc_r, (ptr, ch, file),
|
||||||
FILE * file)
|
FILE * file)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT(ptr);
|
CHECK_INIT(ptr, file);
|
||||||
_flockfile (file);
|
_flockfile (file);
|
||||||
result = _putc_r (ptr, ch, file);
|
result = _putc_r (ptr, ch, file);
|
||||||
_funlockfile (file);
|
_funlockfile (file);
|
||||||
|
@ -97,7 +97,7 @@ _DEFUN(fputc, (ch, file),
|
||||||
{
|
{
|
||||||
#if !defined(__OPTIMIZE_SIZE__) && !defined(PREFER_SIZE_OVER_SPEED)
|
#if !defined(__OPTIMIZE_SIZE__) && !defined(PREFER_SIZE_OVER_SPEED)
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, file);
|
||||||
_flockfile (file);
|
_flockfile (file);
|
||||||
result = _putc_r (_REENT, ch, file);
|
result = _putc_r (_REENT, ch, file);
|
||||||
_funlockfile (file);
|
_funlockfile (file);
|
||||||
|
|
|
@ -86,7 +86,7 @@ _DEFUN(_fputs_r, (ptr, s, fp),
|
||||||
uio.uio_iov = &iov;
|
uio.uio_iov = &iov;
|
||||||
uio.uio_iovcnt = 1;
|
uio.uio_iovcnt = 1;
|
||||||
|
|
||||||
CHECK_INIT(ptr);
|
CHECK_INIT(ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sfvwrite_r (ptr, fp, &uio);
|
result = __sfvwrite_r (ptr, fp, &uio);
|
||||||
|
|
|
@ -145,7 +145,7 @@ _DEFUN(_fread_r, (ptr, buf, size, count, fp),
|
||||||
if ((resid = count * size) == 0)
|
if ((resid = count * size) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
CHECK_INIT(ptr);
|
CHECK_INIT(ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
if (fp->_r < 0)
|
if (fp->_r < 0)
|
||||||
|
|
|
@ -99,7 +99,7 @@ _DEFUN(_freopen_r, (ptr, file, mode, fp),
|
||||||
|
|
||||||
__sfp_lock_acquire ();
|
__sfp_lock_acquire ();
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ _DEFUN(_fseek_r, (ptr, fp, offset, whence),
|
||||||
|
|
||||||
/* Make sure stdio is set up. */
|
/* Make sure stdio is set up. */
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ _DEFUN(_ftell_r, (ptr, fp),
|
||||||
|
|
||||||
/* Ensure stdio is set up. */
|
/* Ensure stdio is set up. */
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ _DEFUN(_fwrite_r, (ptr, buf, size, count, fp),
|
||||||
* generally slow and since this occurs whenever size==0.
|
* generally slow and since this occurs whenever size==0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CHECK_INIT(ptr);
|
CHECK_INIT(ptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
if (__sfvwrite_r (ptr, fp, &uio) == 0)
|
if (__sfvwrite_r (ptr, fp, &uio) == 0)
|
||||||
|
|
|
@ -91,7 +91,7 @@ _DEFUN(_getc_r, (ptr, fp),
|
||||||
register FILE *fp)
|
register FILE *fp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sgetc_r (ptr, fp);
|
result = __sgetc_r (ptr, fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
@ -105,7 +105,7 @@ _DEFUN(getc, (fp),
|
||||||
register FILE *fp)
|
register FILE *fp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sgetc_r (_REENT, fp);
|
result = __sgetc_r (_REENT, fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
|
@ -79,7 +79,7 @@ _DEFUN(__getdelim, (bufptr, n, delim, fp),
|
||||||
*n = DEFAULT_LINE_SIZE;
|
*n = DEFAULT_LINE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,31 @@ struct _glue * _EXFUN(__sfmoreglue,(struct _reent *,int n));
|
||||||
|
|
||||||
/* Called by the main entry point fns to ensure stdio has been initialized. */
|
/* Called by the main entry point fns to ensure stdio has been initialized. */
|
||||||
|
|
||||||
#define CHECK_INIT(ptr) \
|
#ifdef _REENT_SMALL
|
||||||
|
#define CHECK_INIT(ptr, fp) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if ((ptr) && !(ptr)->__sdidinit) \
|
||||||
|
__sinit (ptr); \
|
||||||
|
if ((fp) == (FILE *)&__sf_fake_stdin) \
|
||||||
|
(fp) = stdin; \
|
||||||
|
else if ((fp) == (FILE *)&__sf_fake_stdout) \
|
||||||
|
(fp) = stdout; \
|
||||||
|
else if ((fp) == (FILE *)&__sf_fake_stderr) \
|
||||||
|
(fp) = stderr; \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#else /* !_REENT_SMALL */
|
||||||
|
#define CHECK_INIT(ptr, fp) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if ((ptr) && !(ptr)->__sdidinit) \
|
||||||
|
__sinit (ptr); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#endif /* !_REENT_SMALL */
|
||||||
|
|
||||||
|
#define CHECK_STD_INIT(ptr) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if ((ptr) && !(ptr)->__sdidinit) \
|
if ((ptr) && !(ptr)->__sdidinit) \
|
||||||
|
|
|
@ -96,7 +96,7 @@ _DEFUN(_putc_r, (ptr, c, fp),
|
||||||
register FILE *fp)
|
register FILE *fp)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sputc_r (ptr, c, fp);
|
result = __sputc_r (ptr, c, fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
@ -111,7 +111,7 @@ _DEFUN(putc, (c, fp),
|
||||||
{
|
{
|
||||||
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
|
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
|
||||||
int result;
|
int result;
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
result = __sputc_r (_REENT, c, fp);
|
result = __sputc_r (_REENT, c, fp);
|
||||||
_funlockfile (fp);
|
_funlockfile (fp);
|
||||||
|
|
|
@ -43,7 +43,7 @@ _DEFUN(__srefill_r, (ptr, fp),
|
||||||
{
|
{
|
||||||
/* make sure stdio is set up */
|
/* make sure stdio is set up */
|
||||||
|
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
|
|
||||||
fp->_r = 0; /* largely a convenience for callers */
|
fp->_r = 0; /* largely a convenience for callers */
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ _DEFUN(setvbuf, (fp, buf, mode, size),
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ _DEFUN(_ungetc_r, (rptr, c, fp),
|
||||||
??? Might be able to remove this as some other stdio routine should
|
??? Might be able to remove this as some other stdio routine should
|
||||||
have already been called to get the char we are un-getting. */
|
have already been called to get the char we are un-getting. */
|
||||||
|
|
||||||
CHECK_INIT (rptr);
|
CHECK_INIT (rptr, fp);
|
||||||
|
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
|
|
|
@ -540,7 +540,7 @@ _DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap),
|
||||||
(u_long)GET_ARG (N, ap, u_int))
|
(u_long)GET_ARG (N, ap, u_int))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CHECK_INIT (data);
|
CHECK_INIT (data, fp);
|
||||||
_flockfile (fp);
|
_flockfile (fp);
|
||||||
|
|
||||||
/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
|
/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
|
||||||
|
|
|
@ -231,7 +231,7 @@ _DEFUN(VFSCANF, (fp, fmt, ap),
|
||||||
_CONST char *fmt _AND
|
_CONST char *fmt _AND
|
||||||
va_list ap)
|
va_list ap)
|
||||||
{
|
{
|
||||||
CHECK_INIT(_REENT);
|
CHECK_INIT(_REENT, fp);
|
||||||
return __SVFSCANF_R (_REENT, fp, fmt, ap);
|
return __SVFSCANF_R (_REENT, fp, fmt, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ _DEFUN(_VFSCANF_R, (data, fp, fmt, ap),
|
||||||
_CONST char *fmt _AND
|
_CONST char *fmt _AND
|
||||||
va_list ap)
|
va_list ap)
|
||||||
{
|
{
|
||||||
CHECK_INIT(data);
|
CHECK_INIT(data, fp);
|
||||||
return __SVFSCANF_R (data, fp, fmt, ap);
|
return __SVFSCANF_R (data, fp, fmt, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ _DEFUN(__swbuf_r, (ptr, c, fp),
|
||||||
|
|
||||||
/* Ensure stdio has been initialized. */
|
/* Ensure stdio has been initialized. */
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In case we cannot write, or longjmp takes us out early,
|
* In case we cannot write, or longjmp takes us out early,
|
||||||
|
|
|
@ -34,7 +34,7 @@ _DEFUN(__swsetup, (fp),
|
||||||
{
|
{
|
||||||
/* Make sure stdio is set up. */
|
/* Make sure stdio is set up. */
|
||||||
|
|
||||||
CHECK_INIT (_REENT);
|
CHECK_INIT (_REENT, fp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we are not writing, we had better be reading and writing.
|
* If we are not writing, we had better be reading and writing.
|
||||||
|
|
|
@ -99,7 +99,7 @@ _DEFUN (_freopen64_r, (ptr, file, mode, fp),
|
||||||
|
|
||||||
__sfp_lock_acquire ();
|
__sfp_lock_acquire ();
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
_flockfile(fp);
|
_flockfile(fp);
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ _DEFUN (_fseeko64_r, (ptr, fp, offset, whence),
|
||||||
|
|
||||||
/* Make sure stdio is set up. */
|
/* Make sure stdio is set up. */
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
_flockfile(fp);
|
_flockfile(fp);
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ _DEFUN (_ftello64_r, (ptr, fp),
|
||||||
|
|
||||||
/* Ensure stdio is set up. */
|
/* Ensure stdio is set up. */
|
||||||
|
|
||||||
CHECK_INIT (ptr);
|
CHECK_INIT (ptr, fp);
|
||||||
|
|
||||||
_flockfile(fp);
|
_flockfile(fp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue