]> sourceware.org Git - newlib-cygwin.git/commitdiff
2004-09-16 Antony King <antony.king@st.com>
authorJeff Johnston <jjohnstn@redhat.com>
Thu, 16 Sep 2004 21:30:51 +0000 (21:30 +0000)
committerJeff Johnston <jjohnstn@redhat.com>
Thu, 16 Sep 2004 21:30:51 +0000 (21:30 +0000)
        * libc/include/sys/lock.h: Replaced empty {} with (0) to conform
        with locking API.
        * libc/include/sys/stdio.h: (_flockfile)[!_SINGLE_THREAD]: Add
        check for__SSTR in _flags and if set, skip lock request.
        (_funlockfile)[!SINGLE_THREAD]: Ditto.
        * libc/stdio/local.h (CHECK_INIT): Added check that _REENT is
        not NULL.
        * libc/stdio/siprintf.c (siprintf, _siprintf_r): Added missing
        initialisation of _file to -1 in local FILE.
        * libc/stdio/snprintf.c (snprintf, _snprintf_r): Ditto.
        * libc/stdio/sscanf.c (sscanf, _sscanf_r): Ditto.
        * libc/stdio/vsnprintf.c (vsnprintf, _vsnprintf_r): Ditto.
        * libc/stdio/vsscanf.c (_vsscanf_r): Ditto.
        * libc/stdio/sscanf.c (sscanf, _sscanf_r): Added __SSTR flag to
        _flags in local FILE to prevent locking.
        * libc/stdio/vsscanf.c (_vsscanf_r): Ditto.

newlib/ChangeLog
newlib/libc/include/sys/lock.h
newlib/libc/include/sys/stdio.h
newlib/libc/stdio/local.h
newlib/libc/stdio/siprintf.c
newlib/libc/stdio/snprintf.c
newlib/libc/stdio/sscanf.c
newlib/libc/stdio/vsnprintf.c
newlib/libc/stdio/vsscanf.c

index 9c4b35fa976d2f38d3e38606bedfe28cd75b1be1..d81a5475e5f2e6b2bb5f58f6bb070337b03e7fc0 100644 (file)
@@ -1,3 +1,22 @@
+2004-09-16  Antony King  <antony.king@st.com>
+
+       * libc/include/sys/lock.h: Replaced empty {} with (0) to conform
+       with locking API.
+       * libc/include/sys/stdio.h: (_flockfile)[!_SINGLE_THREAD]: Add 
+       check for__SSTR in _flags and if set, skip lock request.
+       (_funlockfile)[!SINGLE_THREAD]: Ditto.
+       * libc/stdio/local.h (CHECK_INIT): Added check that _REENT is
+       not NULL.
+       * libc/stdio/siprintf.c (siprintf, _siprintf_r): Added missing
+       initialisation of _file to -1 in local FILE.
+       * libc/stdio/snprintf.c (snprintf, _snprintf_r): Ditto.
+       * libc/stdio/sscanf.c (sscanf, _sscanf_r): Ditto.
+       * libc/stdio/vsnprintf.c (vsnprintf, _vsnprintf_r): Ditto.
+       * libc/stdio/vsscanf.c (_vsscanf_r): Ditto.
+       * libc/stdio/sscanf.c (sscanf, _sscanf_r): Added __SSTR flag to
+       _flags in local FILE to prevent locking.
+       * libc/stdio/vsscanf.c (_vsscanf_r): Ditto.
+
 2004-09-16  Antony King  <antony.king@st.com>
 
        * libc/stdio/fwalk.c (_fwalk): Remove check for _GLOBAL_REENT
index 984bc5f80e23990cf3643936539596bf6d579b87..c05814a2a7e7e0bcec627110684ad0134bc27ffc 100644 (file)
@@ -8,15 +8,15 @@ typedef int _LOCK_RECURSIVE_T;
 
 #define __LOCK_INIT(class,lock) static int lock = 0;
 #define __LOCK_INIT_RECURSIVE(class,lock) static int lock = 0;
-#define __lock_init(lock) {}
-#define __lock_init_recursive(lock) {}
-#define __lock_close(lock) {}
-#define __lock_close_recursive(lock) {}
-#define __lock_acquire(lock) {}
-#define __lock_acquire_recursive(lock) {}
-#define __lock_try_acquire(lock) {}
-#define __lock_try_acquire_recursive(lock) {}
-#define __lock_release(lock) {}
-#define __lock_release_recursive(lock) {}
+#define __lock_init(lock) (0)
+#define __lock_init_recursive(lock) (0)
+#define __lock_close(lock) (0)
+#define __lock_close_recursive(lock) (0)
+#define __lock_acquire(lock) (0)
+#define __lock_acquire_recursive(lock) (0)
+#define __lock_try_acquire(lock) (0)
+#define __lock_try_acquire_recursive(lock) (0)
+#define __lock_release(lock) (0)
+#define __lock_release_recursive(lock) (0)
 
 #endif /* __SYS_LOCK_H__ */
index c0cf338930b6c38106c3430f87b6cdcecc96282b..fa9cd5d0a5e2fdd0acb7fe0d79a1f734dddecdbb 100644 (file)
@@ -5,10 +5,12 @@
 #include <sys/reent.h>
 
 /* Internal locking macros, used to protect stdio functions.  In the
-   general case, expand to nothing. */
+   general case, expand to nothing. Use __SSTR flag in FILE _flags to
+   detect if FILE is private to sprintf/sscanf class of functions; if
+   set then do nothing as lock is not initialised. */
 #if !defined(_flockfile)
 #ifndef __SINGLE_THREAD__
-#  define _flockfile(fp) __lock_acquire_recursive(fp->_lock)
+#  define _flockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_acquire_recursive((fp)->_lock))
 #else
 #  define _flockfile(fp)
 #endif
@@ -16,7 +18,7 @@
 
 #if !defined(_funlockfile)
 #ifndef __SINGLE_THREAD__
-#  define _funlockfile(fp) __lock_release_recursive(fp->_lock)
+#  define _funlockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_release_recursive((fp)->_lock))
 #else
 #  define _funlockfile(fp)
 #endif
index e3d5da5736d5b77697c729050643b4bcbbb08c60..e62f3418d0d99ac541cf3804c4a254f9d04fe476 100644 (file)
@@ -48,11 +48,11 @@ extern int   _EXFUN(__srefill,(FILE *fp));
 /* Called by the main entry point fns to ensure stdio has been initialized.  */
 
 #define CHECK_INIT(fp) \
-  do                                   \
-    {                                  \
-      if (!_REENT->__sdidinit)         \
-       __sinit (_REENT);               \
-    }                                  \
+  do                                           \
+    {                                          \
+      if (_REENT && !_REENT->__sdidinit)       \
+       __sinit (_REENT);                       \
+    }                                          \
   while (0)
 
 /* Return true iff the given FILE cannot be written now.  */
index 95ff8084fe06c3cd413a1755e575075c8512812f..838200805eff0675c2b24e50b5cb25ca15f99f8c 100644 (file)
@@ -85,6 +85,7 @@ siprintf(str, fmt, va_alist)
   f._flags = __SWR | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = INT_MAX;
+  f._file = -1;  /* No file. */
 #ifdef _HAVE_STDC
   va_start (ap, fmt);
 #else
@@ -119,6 +120,7 @@ _siprintf_r(rptr, str, fmt, va_alist)
   f._flags = __SWR | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = INT_MAX;
+  f._file = -1;  /* No file. */
 #ifdef _HAVE_STDC
   va_start (ap, fmt);
 #else
index fc818d2e924ac2875e7cdd78f66aa27031f623cc..9c5c7cbb46c973c4e5523ebf9444f7411e7c5ff1 100644 (file)
@@ -51,6 +51,7 @@ _snprintf_r(ptr, str, size, fmt, va_alist)
   f._flags = __SWR | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = (size > 0 ? size - 1 : 0);
+  f._file = -1;  /* No file. */
 #ifdef _HAVE_STDC
   va_start (ap, fmt);
 #else
@@ -86,6 +87,7 @@ snprintf(str, size, fmt, va_alist)
   f._flags = __SWR | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = (size > 0 ? size - 1 : 0);
+  f._file = -1;  /* No file. */
 #ifdef _HAVE_STDC
   va_start (ap, fmt);
 #else
index 1aca405075cd708793283686c6eb483f2727081b..687f53edf969a64c69ecdbf6a0c859fc1949c078 100644 (file)
@@ -402,12 +402,13 @@ sscanf(str, fmt, va_alist)
   va_list ap;
   FILE f;
 
-  f._flags = __SRD;
+  f._flags = __SRD | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._r = strlen (str);
   f._read = eofread;
   f._ub._base = NULL;
   f._lb._base = NULL;
+  f._file = -1;  /* No file. */
 #ifdef _HAVE_STDC
   va_start (ap, fmt);
 #else
@@ -439,12 +440,13 @@ _sscanf_r(ptr, str, fmt, va_alist)
   va_list ap;
   FILE f;
 
-  f._flags = __SRD;
+  f._flags = __SRD | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._r = strlen (str);
   f._read = eofread;
   f._ub._base = NULL;
   f._lb._base = NULL;
+  f._file = -1;  /* No file. */
 #ifdef _HAVE_STDC
   va_start (ap, fmt);
 #else
index fb80f41921dd5982b7e4ba88822fc1613d2958c6..9fc1b2d89817f65bf6f2766971fb2e7d904392d7 100644 (file)
@@ -45,6 +45,7 @@ _DEFUN(vsnprintf, (str, size, fmt, ap),
   f._flags = __SWR | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = (size > 0 ? size - 1 : 0);
+  f._file = -1;  /* No file. */
   ret = _vfprintf_r (_REENT, &f, fmt, ap);
   if (size > 0)
     *f._p = 0;
@@ -67,6 +68,7 @@ _DEFUN(_vsnprintf_r, (ptr, str, size, fmt, ap),
   f._flags = __SWR | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._w = (size > 0 ? size - 1 : 0);
+  f._file = -1;  /* No file. */
   ret = _vfprintf_r (ptr, &f, fmt, ap);
   if (size > 0)
     *f._p = 0;
index c6237112ceedc93417f447df7a13264a42ba0a8e..22ed9cdf734c81f1e80746209a5d2c6857df26eb 100644 (file)
@@ -63,12 +63,12 @@ _DEFUN(_vsscanf_r, (ptr, str, fmt, ap),
 {
   FILE f;
 
-  f._flags = __SRD;
+  f._flags = __SRD | __SSTR;
   f._bf._base = f._p = (unsigned char *) str;
   f._bf._size = f._r = strlen (str);
   f._read = eofread1;
   f._ub._base = NULL;
   f._lb._base = NULL;
-  return __svfscanf_r (ptr, &f, fmt, ap);    
+  f._file = -1;  /* No file. */
+  return __svfscanf_r (ptr, &f, fmt, ap);
 }
-
This page took 0.056049 seconds and 5 git commands to generate.