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.
This commit is contained in:
Ulrich Drepper 2001-08-28 04:52:25 +00:00
parent 497b760b34
commit c06a49c551
7 changed files with 59 additions and 15 deletions

View File

@ -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> 2001-08-27 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Update call to _dl_lookup_symbol. * elf/rtld.c (dl_main): Update call to _dl_lookup_symbol.

View File

@ -193,7 +193,7 @@ searchstring (struct Strent **sep, struct Strent *newstr)
/* Compare the strings. */ /* Compare the strings. */
cmpres = memcmp ((*sep)->reverse, newstr->reverse, cmpres = memcmp ((*sep)->reverse, newstr->reverse,
MIN ((*sep)->len, newstr->len)); MIN ((*sep)->len, newstr->len) - 1);
if (cmpres == 0) if (cmpres == 0)
/* We found a matching string. */ /* We found a matching string. */
return sep; 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 /* 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 add has a common prefix with a string we already have but
it is longer. In this case we have to put it first. */ it is longer. In this case we have to put it first. */
st->total += newstr->len - (*sep)->len;
newstr->next = *sep; newstr->next = *sep;
*sep = newstr; *sep = newstr;
st->total += newstr->len - (*sep)->len;
} }
else else
{ {

View 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> 2001-08-26 Jakub Jelinek <jakub@redhat.com>
* sysdeps/pthread/bits/libc-lock.h (__libc_lock_t): Define * sysdeps/pthread/bits/libc-lock.h (__libc_lock_t): Define

View File

@ -25,8 +25,12 @@
/* Mutex type. */ /* Mutex type. */
#if defined(_LIBC) || defined(_IO_MTSAFE_IO) #if defined(_LIBC) || defined(_IO_MTSAFE_IO)
typedef pthread_mutex_t __libc_lock_t; typedef pthread_mutex_t __libc_lock_t;
typedef pthread_rwlock_t __libc_rwlock_t;
typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_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 #else
typedef struct __libc_lock_opaque__ __libc_lock_t; typedef struct __libc_lock_opaque__ __libc_lock_t;
typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t;

View File

@ -238,12 +238,23 @@ vsyslog(pri, fmt, ap)
++bufsize; ++bufsize;
if (!connected || __send(LogFile, buf, bufsize, 0) < 0) if (!connected || __send(LogFile, buf, bufsize, 0) < 0)
{
if (connected)
{
/* 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 */ closelog_internal (); /* attempt re-open next time */
/* /*
* Output the message to the console; don't worry about blocking, * Output the message to the console; don't worry
* if console blocks everything will. Make sure the error reported * about blocking, if console blocks everything will.
* is the one from the syslogd failure. * Make sure the error reported is the one from the
* syslogd failure.
*/ */
if (LogStat & LOG_CONS && if (LogStat & LOG_CONS &&
(fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0) (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
@ -252,6 +263,7 @@ vsyslog(pri, fmt, ap)
(void)__close(fd); (void)__close(fd);
} }
} }
}
if (sigpipe == 0) if (sigpipe == 0)
__sigaction (SIGPIPE, &oldaction, (struct sigaction *) NULL); __sigaction (SIGPIPE, &oldaction, (struct sigaction *) NULL);

View File

@ -31,7 +31,8 @@ main(int argc, char *argv[])
buf[words * 4 + 3] = (last & 8) != 0 ? 'e' : '\0'; buf[words * 4 + 3] = (last & 8) != 0 ? 'e' : '\0';
buf[words * 4 + 4] = '\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", printf ("failed for base=%Zu, words=%Zu, and last=%Zu\n",
base, words, last); base, words, last);

View File

@ -36,6 +36,9 @@ __strnlen (const char *str, size_t maxlen)
if (maxlen == 0) if (maxlen == 0)
return 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. /* Handle the first few characters by reading one character at a time.
Do this until CHAR_PTR is aligned on a longword boundary. */ Do this until CHAR_PTR is aligned on a longword boundary. */
for (char_ptr = str; ((unsigned long int) char_ptr for (char_ptr = str; ((unsigned long int) char_ptr