OSDN Git Service

2004-05-27 Jeff Johnston <jjohnstn@redhat.com>
authorjjohnstn <jjohnstn>
Thu, 27 May 2004 14:56:51 +0000 (14:56 +0000)
committerjjohnstn <jjohnstn>
Thu, 27 May 2004 14:56:51 +0000 (14:56 +0000)
        * libc/stdio/vfprintf.c (_VFPRINTF): Move file locking
        from here ...
        (_VFPRINTF_R): ... to here so all I/O printf routines
        are covered.

newlib/ChangeLog
newlib/libc/stdio/vfprintf.c

index 43ca24a..c1866d8 100644 (file)
@@ -1,3 +1,10 @@
+2004-05-27  Jeff Johnston  <jjohnstn@redhat.com>
+
+       * libc/stdio/vfprintf.c (_VFPRINTF): Move file locking
+       from here ...
+       (_VFPRINTF_R): ... to here so all I/O printf routines
+       are covered.
+
 2004-05-26  Jeff Johnston  <jjohnstn@redhat.com>
 
        * libc/search/hash_buf.c: Protect MAX and MIN macros from
index e63a7d8..b589d18 100644 (file)
@@ -381,10 +381,7 @@ _DEFUN(VFPRINTF, (fp, fmt0, ap),
        va_list ap)
 {
   int result;
-  _flockfile (fp);
-  CHECK_INIT (fp);
   result = _VFPRINTF_R (_REENT, fp, fmt0, ap);
-  _funlockfile (fp);
   return result;
 }
 
@@ -536,14 +533,21 @@ _DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap),
            (u_long)GET_ARG (N, ap, u_int))
 #endif
 
+       _flockfile (fp);
+       CHECK_INIT (fp);
+
        /* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
-       if (cantwrite (fp))
+       if (cantwrite (fp)) {
+               _funlockfile (fp);      
                return (EOF);
+       }
 
        /* optimise fprintf(stderr) (and other unbuffered Unix files) */
        if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
-           fp->_file >= 0)
+           fp->_file >= 0) {
+               _funlockfile (fp);
                return (__sbprintf (data, fp, fmt0, ap));
+       }
 
        fmt = (char *)fmt0;
        uio.uio_iov = iovp = iov;
@@ -1211,6 +1215,7 @@ done:
 error:
        if (malloc_buf != NULL)
                _free_r (data, malloc_buf);
+       _funlockfile (fp);
        return (__sferror (fp) ? EOF : ret);
        /* NOTREACHED */
 }