about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--elf/dl-addr.c19
-rw-r--r--misc/syslog.c3
3 files changed, 25 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 5747a62723..c5e8ff3251 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 1998-02-27  Ulrich Drepper  <drepper@cygnus.com>
 
+	* misc/syslog.c: Change to allow user the interpretation of the
+	outcome even with syslog having no return value.
+
+1998-02-05 20:41  Wolfram Gloger  <wmglo@dent.med.uni-muenchen.de>
+
+	* elf/dl-addr.c: Fix search algorithms in dladdr(); don't assume
+	that the number of program headers is >0 (which is wrong for the
+	loader itself).
+
+1998-02-27  Ulrich Drepper  <drepper@cygnus.com>
+
 	* Makefile (distribute): Add README.libm.
 
 1998-02-27  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
diff --git a/elf/dl-addr.c b/elf/dl-addr.c
index baa6df593e..4d78738e64 100644
--- a/elf/dl-addr.c
+++ b/elf/dl-addr.c
@@ -1,5 +1,5 @@
 /* Locate the shared object symbol nearest a given address.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -41,13 +41,16 @@ _dl_addr (const void *address, Dl_info *info)
       /* We know ADDRESS lies within MATCH if in any shared object.
 	 Make sure it isn't past the end of MATCH's segments.  */
       size_t n = match->l_phnum;
-      do
-	--n;
-      while (match->l_phdr[n].p_type != PT_LOAD);
-      if (addr >= (match->l_addr +
-		   match->l_phdr[n].p_vaddr + match->l_phdr[n].p_memsz))
-	/* Off the end of the highest-addressed shared object.  */
-	return 0;
+      if (n > 0)
+	{
+	  do
+	    --n;
+	  while (match->l_phdr[n].p_type != PT_LOAD);
+	  if (addr >= (match->l_addr +
+		       match->l_phdr[n].p_vaddr + match->l_phdr[n].p_memsz))
+	    /* Off the end of the highest-addressed shared object.  */
+	    return 0;
+	}
     }
   else
     return 0;
diff --git a/misc/syslog.c b/misc/syslog.c
index 0984845699..0373ee1241 100644
--- a/misc/syslog.c
+++ b/misc/syslog.c
@@ -252,6 +252,8 @@ openlog_internal(const char *ident, int logstat, int logfac)
 			}
 		}
 		if (LogFile != -1 && !connected)
+		{
+			int old_errno = errno;
 			if (__connect(LogFile, &SyslogAddr, sizeof(SyslogAddr))
 			    == -1)
 			{
@@ -263,6 +265,7 @@ openlog_internal(const char *ident, int logstat, int logfac)
 				{
 					/* retry with next SOCK_STREAM: */
 					LogType = SOCK_STREAM;
+					__set_errno (old_errno);
 					continue;
 				}
 			} else