delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/2001/04/21/00:09:18

Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-developers-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-developers/>
List-Post: <mailto:cygwin-developers AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-developers-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-developers-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin-developers AT sources DOT redhat DOT com
Message-ID: <3AE108A4.C4C0E026@ece.gatech.edu>
Date: Sat, 21 Apr 2001 00:12:20 -0400
From: Charles Wilson <cwilson AT ece DOT gatech DOT edu>
X-Mailer: Mozilla 4.75 [en] (Windows NT 5.0; U)
X-Accept-Language: en
MIME-Version: 1.0
To: cygwin-developers AT cygwin DOT com
CC: cygwin-developers AT cygwin DOT com, jjohnstn AT cygnus DOT com
Subject: Re: vfscanf in newlib
References: <3ADD0441 DOT 91F76FB6 AT ece DOT gatech DOT edu> <3ADE1FC1 DOT F0A10A89 AT cygnus DOT com> <3ADE640A DOT 34E88DCE AT ece DOT gatech DOT edu> <3AE040FC DOT 16BD67BC AT ece DOT gatech DOT edu> <3AE070F3 DOT 1C45633A AT cygnus DOT com> <20010420145228 DOT B25768 AT redhat DOT com> <3AE0894D DOT 5288FDF3 AT cygnus DOT com> <20010420152744 DOT A26175 AT redhat DOT com> <3AE0E6C9 DOT CFA716BF AT ece DOT gatech DOT edu>

This is a multi-part message in MIME format.
--------------19EB1159C577E2BE448BBFF6
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Charles Wilson wrote:
> 
> Christopher Faylor wrote:
> > >J Johnston wrote:
> > >As discussed, I have attached the new patch.  I moved stuff around in stdio.h
> > >because there were multiple sections using the same #ifdef.  There were also
> > >some routines that were not properly under the non-strict ANSI flag.
> >
> > I'm not sure if this is directed to me, but I was just asking Chuck for the
> > appropriate cygwin.din changes.
> >
> > I decided that it was silly for me to ask him to do this since it is easy to
> > do myself, though, so I've made the appropriate modifications.  So, if/when you
> > check this in we'll be ready.
> 
> Great -- thanks for taking care of that.  One comment, though:
> 
> if the undecorated symbol is
>   _vscanf_r
> then the decorated symbol should be
>  __vscanf_r
> 
> So, shouldn't cygwin.din have
> _vscanf_r
> __vscanf_r = _vscanf_r
> 
> Your patch has
> _vscanf_f
> vscanf_r = _vscanf_r

[NOTE to newlib folks: the cygwin.din commentary above is
cygwin-specific, ignore]

Regardless of any argument about cygwin.din and cygwin1.dll exports, I
built a new cygwin kernel using Jeff's most recent vfscanf patch (taken
via 'cvs update' since he'd already committed it before I got a chance
to test).  Also, my new kernel used Chris Faylor's changes to
cygwin.din.

I snarfed some test programs from the web, and built against the new
cygwin1.dll -- and it all worked fine.  I tested (briefly):
  vfprintf
  vprintf
  vsprintf
  vsnprintf
  vfscanf
  vscanf
  vsscanf

"My" test package is attached. Unpack, make, make check.

I did not test any of the reentrant functions directly.

In the case of _vfscanf_r, _vscanf_r, and _vsscanf_r, these three
reentrant functions call the same core workhorse function that the
"non-reentrant" functions do: __svfscanf_r().  So, the reentrant
functions should *work*, but I can't guarantee they are truly reentrant.

In the case of the reentrant vfprintf derivatives, a few notes:

  vfprintf calls _vfprintf_r {<--- THIS IS OK}
    fine.  testing vfprintf tests _vfprintf_r (but doesn't *prove* that
_vfprintf_r is reentrant)

-----

  vprintf calls vfprintf (which calls _vfprintf_r AFTER doing a
CHECK_INIT()) {THIS IS OK}.  vprintf is not declared using _DEFUN.
  there is no _vprintf_r

-----
  
  vsprintf calls vfprintf (which calls _vfprintf_r AFTER ...) {<--- THIS
IS OK, but...}
  _vsprintf_r is misnamed "vsprintf_r" (no leading underscore), but the
header files declare it *with* the underscore.
  Neither function is declared with _DEFUN.
  Also, "vsprintf_r" calls vfprintf, not _vfprintf_r.  Shouldn't it call
the reentrant base function?  I know that vfprintf calls _vfprintf_r,
but it does so only after calling CHECK_INIT on the faked-up file
discriptor.  

  CHECK_INIT sets the ->_data field of the fake filedesc to "_REENT",
but _vsprintf_r already sets that field explicitly to the reentrancy
pointer originally passed in to _vsprintf_r ?  CHECK_INIT also performs
some tests (and possibly initialization) on the __sdidinit field of the
reentrancy pointer -- this is probably unnecessary if you set fp->data =
ptr.

-----

  vsnprintf calls vfprintf (which calls _vfprintf_r AFTER ...) {<---
THIS IS OK, but ...}
  _vsnprintf_r is misnamed "vsnprintf_r" (no leading underscore).  Also,
_vsnprintf_r calls vfprintf instead of _vfprintf_r. Neither function is
declared with _DEFUN.

-----

If my arguments are correct, a patch to implement the required changes
is attached.  I've rebuilt cygwin1.dll (*again*) with these patches, and
run my test suite (*again*) also against this new(er)
cygwin1.dll/newlib.

--Chuck

ChangeLog

Fri Apr 20 23:48:00 2001  Charles Wilson  <cwilson AT ece DOT gatech DOT edu

	* libc/stdio/vprintf.c (vprintf): fix signature to use _DEFUN
	* libc/stdio/vprintf.c (_vprintf_r): new function
	* libc/stdio/vsnprintf.c (vsnprintf): fix signature to use _DEFUN
	* libc/stdio/vsnprintf.c (_vsnprintf_r): fix signature to use
	_DEFUN, and call _vfprintf_r, not vfprintf.
	* libc/stdio/vsprintf.c (vsprintf.c): fix signature to use _DEFUN
	* libc/stdio/vsnprintf.c (_vsprintf_r): fix signature to use
	_DEFUN, and call _vfprintf_r, not vfprintf.
--------------19EB1159C577E2BE448BBFF6
Content-Type: application/x-gzip;
 name="sscantest.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="sscantest.tar.gz"

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
dQBQAAA=
--------------19EB1159C577E2BE448BBFF6
Content-Type: text/plain; charset=us-ascii;
 name="vfscanf-newlib.diff2"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="vfscanf-newlib.diff2"

Index: libc/stdio/vprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vprintf.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1  old/libc/stdio/vprintf.c new/libc/stdio/vprintf.c
--- old/libc/stdio/vprintf.c	2000/02/17 19:39:47	1.1.1.1
+++ new/libc/stdio/vprintf.c	2001/04/21 03:43:55
@@ -27,9 +27,18 @@
 #endif
 
 int
-vprintf (fmt, ap)
-     char _CONST *fmt;
-     va_list ap;
+_DEFUN (vprintf, (fmt, ap),
+     _CONST char *fmt _AND
+     va_list ap)
 {
   return vfprintf (stdout, fmt, ap);
+}
+
+int
+_DEFUN (_vprintf_r, (ptr, fmt, ap),
+     struct _reent *ptr _AND
+     _CONST char *fmt _AND
+     va_list ap)
+{
+  return _vfprintf_r (ptr, _stdout_r (ptr), fmt, ap);
 }
Index: libc/stdio/vsnprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vsnprintf.c,v
retrieving revision 1.2
diff -u -r1.2  old/libc/stdio/vsnprintf.c new/libc/stdio/vsnprintf.c
--- old/libc/stdio/vsnprintf.c	2000/08/08 19:01:02	1.2
+++ new/libc/stdio/vsnprintf.c	2001/04/21 03:43:55
@@ -34,11 +34,11 @@
 #endif
 
 int
-vsnprintf (str, size, fmt, ap)
-     char *str;
-     size_t size;
-     char _CONST *fmt;
-     va_list ap;
+_DEFUN (vsnprintf, (str, size, fmt, ap),
+     char *str _AND
+     size_t size _AND
+     _CONST char *fmt _AND
+     va_list ap)
 {
   int ret;
   FILE f;
@@ -54,12 +54,12 @@
 }
 
 int
-vsnprintf_r (ptr, str, size, fmt, ap)
-     struct _reent *ptr;
-     char *str;
-     size_t size;
-     char _CONST *fmt;
-     va_list ap;
+_DEFUN (_vsnprintf_r, (ptr, str, size, fmt, ap),
+     struct _reent *ptr _AND
+     char *str _AND
+     size_t size _AND
+     _CONST char *fmt _AND
+     va_list ap)
 {
   int ret;
   FILE f;
@@ -68,7 +68,7 @@
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = (size > 0 ? size - 1 : 0);
   f._data = ptr;
-  ret = vfprintf (&f, fmt, ap);
+  ret = _vfprintf_r (ptr, &f, fmt, ap);
   if (size > 0)
     *f._p = 0;
   return ret;
Index: libc/stdio/vsprintf.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/stdio/vsprintf.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1  old/libc/stdio/vsprintf.c new/libc/stdio/vsprintf.c
--- old/libc/stdio/vsprintf.c	2000/02/17 19:39:47	1.1.1.1
+++ new/libc/stdio/vsprintf.c	2001/04/21 03:43:57
@@ -32,10 +32,10 @@
 #endif
 
 int
-vsprintf (str, fmt, ap)
-     char *str;
-     char _CONST *fmt;
-     va_list ap;
+_DEFUN (vsprintf, (str, fmt, ap),
+     char *str _AND
+     _CONST char *fmt _AND
+     va_list ap)
 {
   int ret;
   FILE f;
@@ -50,11 +50,11 @@
 }
 
 int
-vsprintf_r (ptr, str, fmt, ap)
-     struct _reent *ptr;
-     char *str;
-     char _CONST *fmt;
-     va_list ap;
+_DEFUN (_vsprintf_r, (ptr, str, fmt, ap),
+     struct _reent *ptr _AND
+     char *str _AND
+     _CONST char *fmt _AND
+     va_list ap)
 {
   int ret;
   FILE f;
@@ -63,7 +63,7 @@
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = INT_MAX;
   f._data = ptr;
-  ret = vfprintf (&f, fmt, ap);
+  ret = _vfprintf_r (ptr, &f, fmt, ap);
   *f._p = 0;
   return ret;
 }

--------------19EB1159C577E2BE448BBFF6--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019