[PATCH 1/2] Fix bug introduced in previous patch (44b60f0c)

Matthew Joyce <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
From: Matt Joyce <[email protected]>

This fixes a bug introduced in a previous patch (Commit 44b60f0c:
Make __sdidinit unused). Removed intitialization of __cleanup from
__smakebuf_r(). All callers of __smakebuf_r() call __sinit()
through the_CHECK_INIT macro, thus __cleanup is already
initialized. This fix also allows _cleanup_r() to be made static.
Changed its name to cleanup_stdio() and removed its declaration
from local.h.
---
 newlib/libc/stdio/fflush.c  | 2 +-
 newlib/libc/stdio/findfp.c  | 8 ++++----
 newlib/libc/stdio/local.h   | 1 -
 newlib/libc/stdio/makebuf.c | 1 -
 4 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/newlib/libc/stdio/fflush.c b/newlib/libc/stdio/fflush.c
index f2d0d9bbb..2b5f13bff 100644
--- a/newlib/libc/stdio/fflush.c
+++ b/newlib/libc/stdio/fflush.c
@@ -234,7 +234,7 @@ __sflush_r (struct _reent *ptr,
 }
 
 #ifdef _STDIO_BSD_SEMANTICS
-/* Called from _cleanup_r.  At exit time, we don't need file locking,
+/* Called from cleanup_stdio().  At exit time, we don't need file locking,
    and we don't want to move the underlying file pointer unless we're
    writing. */
 int
diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c
index eca47bd92..aa5e366d8 100644
--- a/newlib/libc/stdio/findfp.c
+++ b/newlib/libc/stdio/findfp.c
@@ -199,8 +199,8 @@ found:
  * The name `_cleanup' is, alas, fairly well known outside stdio.
  */
 
-void
-_cleanup_r (struct _reent *ptr)
+static void
+cleanup_stdio (struct _reent *ptr)
 {
   int (*cleanup_func) (struct _reent *, FILE *);
 #ifdef _STDIO_BSD_SEMANTICS
@@ -232,7 +232,7 @@ _cleanup_r (struct _reent *ptr)
 void
 _cleanup (void)
 {
-  _cleanup_r (_GLOBAL_REENT);
+  cleanup_stdio (_GLOBAL_REENT);
 }
 #endif
 
@@ -252,7 +252,7 @@ __sinit (struct _reent *s)
     }
 
   /* make sure we clean up on exit */
-  s->__cleanup = _cleanup_r;	/* conservative */
+  s->__cleanup = cleanup_stdio;	/* conservative */
 
   s->__sglue._next = NULL;
 #ifndef _REENT_SMALL
diff --git a/newlib/libc/stdio/local.h b/newlib/libc/stdio/local.h
index 86422eb11..50818db0e 100644
--- a/newlib/libc/stdio/local.h
+++ b/newlib/libc/stdio/local.h
@@ -180,7 +180,6 @@ extern _fpos_t __sseek (struct _reent *, void *, _fpos_t, int);
 extern int    __sclose (struct _reent *, void *);
 extern int    __stextmode (int);
 extern void   __sinit (struct _reent *);
-extern void   _cleanup_r (struct _reent *);
 extern void   __smakebuf_r (struct _reent *, FILE *);
 extern int    __swhatbuf_r (struct _reent *, FILE *, size_t *, int *);
 extern int    _fwalk_reent (struct _reent *, int (*)(struct _reent *, FILE *));
diff --git a/newlib/libc/stdio/makebuf.c b/newlib/libc/stdio/makebuf.c
index 0030812c1..b9c75bbf8 100644
--- a/newlib/libc/stdio/makebuf.c
+++ b/newlib/libc/stdio/makebuf.c
@@ -61,7 +61,6 @@ __smakebuf_r (struct _reent *ptr,
     }
   else
     {
-      ptr->__cleanup = _cleanup_r;
       fp->_flags |= __SMBF;
       fp->_bf._base = fp->_p = (unsigned char *) p;
       fp->_bf._size = size;
-- 
2.31.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.