Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 28 Aug 2001 04:52:25 +0000 (04:52 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 28 Aug 2001 04:52:25 +0000 (04:52 +0000)
2001-08-27  Ulrich Drepper  <drepper@redhat.com>

* misc/syslog.c (vsyslog): Try a bit harder to use syslogd.  If
the connection went down after we first used it try to connect
again and resend the message before printing to the console.
Reported by Coserea Gh. Tudor <tudore@tudore.gecadsoftware.com>.

2001-08-27  Jakub Jelinek  <jakub@redhat.com>

* string/tst-strlen.c (main): Test strnlen (, -1) too.
* sysdeps/generic/strnlen.c (__strnlen): Fix for maxlens with top
bit set.

2001-08-27  Ulrich Drepper  <drepper@redhat.com>

* iconv/strtab.c (searchstring): Use correct length for
comparison.
(strtabadd): Account total size correct if new string has old string as
substring.

ChangeLog
iconv/strtab.c
linuxthreads/ChangeLog
linuxthreads/sysdeps/pthread/bits/libc-lock.h
misc/syslog.c
string/tst-strlen.c
sysdeps/generic/strnlen.c

index a4abdeb..1d21662 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2001-08-27  Ulrich Drepper  <drepper@redhat.com>
+
+       * misc/syslog.c (vsyslog): Try a bit harder to use syslogd.  If
+       the connection went down after we first used it try to connect
+       again and resend the message before printing to the console.
+       Reported by Coserea Gh. Tudor <tudore@tudore.gecadsoftware.com>.
+
+2001-08-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * string/tst-strlen.c (main): Test strnlen (, -1) too.
+       * sysdeps/generic/strnlen.c (__strnlen): Fix for maxlens with top
+       bit set.
+
+2001-08-27  Ulrich Drepper  <drepper@redhat.com>
+
+       * iconv/strtab.c (searchstring): Use correct length for
+       comparison.
+       (strtabadd): Account total size correct if new string has old string as
+       substring.
+
 2001-08-27  Jakub Jelinek  <jakub@redhat.com>
 
        * elf/rtld.c (dl_main): Update call to _dl_lookup_symbol.
index d567f57..4189f97 100644 (file)
@@ -193,7 +193,7 @@ searchstring (struct Strent **sep, struct Strent *newstr)
 
   /* Compare the strings.  */
   cmpres = memcmp ((*sep)->reverse, newstr->reverse,
-                  MIN ((*sep)->len, newstr->len));
+                  MIN ((*sep)->len, newstr->len) - 1);
   if (cmpres == 0)
     /* We found a matching string.  */
     return sep;
@@ -236,10 +236,9 @@ strtabadd (struct Strtab *st, const char *str, size_t len)
          /* When we get here it means that the string we are about to
             add has a common prefix with a string we already have but
             it is longer.  In this case we have to put it first.  */
+         st->total += newstr->len - (*sep)->len;
          newstr->next = *sep;
          *sep = newstr;
-
-         st->total += newstr->len - (*sep)->len;
        }
       else
        {
index 5cbf827..1ce5a23 100644 (file)
@@ -1,3 +1,8 @@
+2001-08-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/pthread/bits/libc-lock.h (__libc_rwlock_t): Only define to
+       non-opaque type if __USE_UNIX98.
+
 2001-08-26  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/pthread/bits/libc-lock.h (__libc_lock_t): Define
index 02dfc91..2c1d162 100644 (file)
 /* Mutex type.  */
 #if defined(_LIBC) || defined(_IO_MTSAFE_IO)
 typedef pthread_mutex_t __libc_lock_t;
-typedef pthread_rwlock_t __libc_rwlock_t;
 typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t;
+# ifdef __USE_UNIX98
+typedef pthread_rwlock_t __libc_rwlock_t;
+# else
+typedef struct __libc_rwlock_opaque__ __libc_rwlock_t;
+# endif
 #else
 typedef struct __libc_lock_opaque__ __libc_lock_t;
 typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;
index 9553c29..58f8199 100644 (file)
@@ -239,17 +239,29 @@ vsyslog(pri, fmt, ap)
 
        if (!connected || __send(LogFile, buf, bufsize, 0) < 0)
          {
-           closelog_internal ();       /* attempt re-open next time */
-           /*
-            * Output the message to the console; don't worry about blocking,
-            * if console blocks everything will.  Make sure the error reported
-            * is the one from the syslogd failure.
-            */
-           if (LogStat & LOG_CONS &&
-               (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
+           if (connected)
              {
-               dprintf (fd, "%s\r\n", buf + msgoff);
-               (void)__close(fd);
+               /* Try to reopen the syslog connection.  Maybe it went
+                  down.  */
+               closelog_internal ();
+               openlog_internal(LogTag, LogStat | LOG_NDELAY, 0);
+             }
+
+           if (!connect || __send(LogFile, buf, bufsize, 0) < 0)
+             {
+               closelog_internal ();   /* attempt re-open next time */
+               /*
+                * Output the message to the console; don't worry
+                * about blocking, if console blocks everything will.
+                * Make sure the error reported is the one from the
+                * syslogd failure.
+                */
+               if (LogStat & LOG_CONS &&
+                   (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
+                 {
+                   dprintf (fd, "%s\r\n", buf + msgoff);
+                   (void)__close(fd);
+                 }
              }
          }
 
index 1b1f834..a1e1159 100644 (file)
@@ -31,7 +31,8 @@ main(int argc, char *argv[])
              buf[words * 4 + 3] = (last & 8) != 0 ? 'e' : '\0';
              buf[words * 4 + 4] = '\0';
 
-             if (strlen (buf) != words * 4 + lens[last])
+             if (strlen (buf) != words * 4 + lens[last]
+                 || strnlen (buf, -1) != words * 4 + lens[last])
                {
                  printf ("failed for base=%Zu, words=%Zu, and last=%Zu\n",
                          base, words, last);
index f1b6760..1386acf 100644 (file)
@@ -36,6 +36,9 @@ __strnlen (const char *str, size_t maxlen)
   if (maxlen == 0)
     return 0;
 
+  if (__builtin_expect (end_ptr < str, 0))
+    end_ptr = (const char *) ~0UL;
+
   /* Handle the first few characters by reading one character at a time.
      Do this until CHAR_PTR is aligned on a longword boundary.  */
   for (char_ptr = str; ((unsigned long int) char_ptr