Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdio/findfp.c')
-rw-r--r--newlib/libc/stdio/findfp.c176
1 files changed, 38 insertions, 138 deletions
diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c
index e3270af38..c6790c491 100644
--- a/newlib/libc/stdio/findfp.c
+++ b/newlib/libc/stdio/findfp.c
@@ -1,3 +1,5 @@
+/* No user fns here. Pesch 15apr92. */
+
/*
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -14,24 +16,20 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
-/* No user fns here. Pesch 15apr92. */
-#include <_ansi.h>
-#include <reent.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
-#include <sys/lock.h>
#include "local.h"
-static _VOID
-_DEFUN(std, (ptr, flags, file, data),
- FILE *ptr _AND
- int flags _AND
- int file _AND
- struct _reent *data)
+static void
+std (ptr, flags, file, data)
+ FILE *ptr;
+ int flags;
+ int file;
+ struct _reent *data;
{
ptr->_p = 0;
ptr->_r = 0;
@@ -46,24 +44,18 @@ _DEFUN(std, (ptr, flags, file, data),
ptr->_write = __swrite;
ptr->_seek = __sseek;
ptr->_close = __sclose;
-#if !defined(__SINGLE_THREAD__) && !defined(_REENT_SMALL)
- __lock_init_recursive (ptr->_lock);
- /*
- * #else
- * lock is already initialized in __sfp
- */
-#endif
+ ptr->_data = data;
#ifdef __SCLE
- if (__stextmode (ptr->_file))
+ if (__stextmode(ptr->_file))
ptr->_flags |= __SCLE;
#endif
}
struct _glue *
-_DEFUN(__sfmoreglue, (d, n),
- struct _reent *d _AND
- register int n)
+__sfmoreglue (d, n)
+ struct _reent *d;
+ register int n;
{
struct _glue *g;
FILE *p;
@@ -84,18 +76,16 @@ _DEFUN(__sfmoreglue, (d, n),
*/
FILE *
-_DEFUN(__sfp, (d),
- struct _reent *d)
+__sfp (d)
+ struct _reent *d;
{
FILE *fp;
int n;
struct _glue *g;
- __sfp_lock_acquire ();
-
- if (!_GLOBAL_REENT->__sdidinit)
- __sinit (_GLOBAL_REENT);
- for (g = &_GLOBAL_REENT->__sglue;; g = g->_next)
+ if (!d->__sdidinit)
+ __sinit (d);
+ for (g = &d->__sglue;; g = g->_next)
{
for (fp = g->_iobs, n = g->_niobs; --n >= 0; fp++)
if (fp->_flags == 0)
@@ -104,30 +94,24 @@ _DEFUN(__sfp, (d),
(g->_next = __sfmoreglue (d, NDYNAMIC)) == NULL)
break;
}
- __sfp_lock_release ();
d->_errno = ENOMEM;
return NULL;
found:
- fp->_file = -1; /* no file */
fp->_flags = 1; /* reserve this slot; caller sets real flags */
-#ifndef __SINGLE_THREAD__
- __lock_init_recursive (fp->_lock);
-#endif
- __sfp_lock_release ();
-
fp->_p = NULL; /* no current pointer */
fp->_w = 0; /* nothing to read or write */
fp->_r = 0;
fp->_bf._base = NULL; /* no buffer */
fp->_bf._size = 0;
fp->_lbfsize = 0; /* not line buffered */
+ fp->_file = -1; /* no file */
/* fp->_cookie = <any>; */ /* caller sets cookie, _read/_write etc */
fp->_ub._base = NULL; /* no ungetc buffer */
fp->_ub._size = 0;
fp->_lb._base = NULL; /* no line buffer */
fp->_lb._size = 0;
-
+ fp->_data = d;
return fp;
}
@@ -139,19 +123,19 @@ found:
* The name `_cleanup' is, alas, fairly well known outside stdio.
*/
-_VOID
-_DEFUN(_cleanup_r, (ptr),
- struct _reent *ptr)
+void
+_cleanup_r (ptr)
+ struct _reent *ptr;
{
- _CAST_VOID _fwalk(ptr, fclose);
- /* _CAST_VOID _fwalk (ptr, fflush); */ /* `cheating' */
+ /* (void) _fwalk(fclose); */
+ (void) _fwalk (ptr, fflush); /* `cheating' */
}
#ifndef _REENT_ONLY
-_VOID
-_DEFUN_VOID(_cleanup)
+void
+_cleanup ()
{
- _cleanup_r (_GLOBAL_REENT);
+ _cleanup_r (_REENT);
}
#endif
@@ -159,112 +143,28 @@ _DEFUN_VOID(_cleanup)
* __sinit() is called whenever stdio's internal variables must be set up.
*/
-_VOID
-_DEFUN(__sinit, (s),
- struct _reent *s)
+void
+__sinit (s)
+ struct _reent *s;
{
- __sinit_lock_acquire ();
-
- if (s->__sdidinit)
- {
- __sinit_lock_release ();
- return;
- }
-
/* make sure we clean up on exit */
s->__cleanup = _cleanup_r; /* conservative */
s->__sdidinit = 1;
- s->__sglue._next = NULL;
-#ifndef _REENT_SMALL
- s->__sglue._niobs = 3;
- s->__sglue._iobs = &s->__sf[0];
-#else
- s->__sglue._niobs = 0;
- s->__sglue._iobs = NULL;
- s->_stdin = __sfp(s);
- s->_stdout = __sfp(s);
- s->_stderr = __sfp(s);
-#endif
-
- std (s->_stdin, __SRD, 0, s);
+ std (s->__sf + 0, __SRD, 0, s);
/* on platforms that have true file system I/O, we can verify whether stdout
is an interactive terminal or not. For all other platforms, we will
default to line buffered mode here. */
#ifdef HAVE_FCNTL
- std (s->_stdout, __SWR, 1, s);
+ std (s->__sf + 1, __SWR, 1, s);
#else
- std (s->_stdout, __SWR | __SLBF, 1, s);
+ std (s->__sf + 1, __SWR | __SLBF, 1, s);
#endif
- std (s->_stderr, __SWR | __SNBF, 2, s);
-
- __sinit_lock_release ();
-}
-
-#ifndef __SINGLE_THREAD__
-
-__LOCK_INIT_RECURSIVE(static, __sfp_lock);
-__LOCK_INIT_RECURSIVE(static, __sinit_lock);
-
-_VOID
-_DEFUN_VOID(__sfp_lock_acquire)
-{
- __lock_acquire_recursive (__sfp_lock);
-}
-
-_VOID
-_DEFUN_VOID(__sfp_lock_release)
-{
- __lock_release_recursive (__sfp_lock);
-}
-
-_VOID
-_DEFUN_VOID(__sinit_lock_acquire)
-{
- __lock_acquire_recursive (__sinit_lock);
-}
-
-_VOID
-_DEFUN_VOID(__sinit_lock_release)
-{
- __lock_release_recursive (__sinit_lock);
-}
-
-/* Walkable file locking routine. */
-static int
-_DEFUN(__fp_lock, (ptr),
- FILE * ptr)
-{
- _flockfile (ptr);
+ std (s->__sf + 2, __SWR | __SNBF, 2, s);
- return 0;
-}
-
-/* Walkable file unlocking routine. */
-static int
-_DEFUN(__fp_unlock, (ptr),
- FILE * ptr)
-{
- _funlockfile (ptr);
-
- return 0;
-}
-
-_VOID
-_DEFUN_VOID(__fp_lock_all)
-{
- __sfp_lock_acquire ();
-
- _CAST_VOID _fwalk (_REENT, __fp_lock);
-}
-
-_VOID
-_DEFUN_VOID(__fp_unlock_all)
-{
- _CAST_VOID _fwalk (_REENT, __fp_unlock);
-
- __sfp_lock_release ();
+ s->__sglue._next = NULL;
+ s->__sglue._niobs = 3;
+ s->__sglue._iobs = &s->__sf[0];
}
-#endif