This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-6-g7fffbdf


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  7fffbdfff7d39cec0783e5b9381fa4093484c235 (commit)
      from  9c7595bda2c37b31e82dab424bfd3015664b176d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7fffbdfff7d39cec0783e5b9381fa4093484c235

commit 7fffbdfff7d39cec0783e5b9381fa4093484c235
Author: 2012-12-27 Bruno Haible <bruno@clisp.org>
Date:   Thu Dec 27 22:37:39 2012 +0100

    BZ#14317: Optimze __xpg_strerror_r
    
    [BZ #14317]
    * string/xpg-strerror.c (__xpg_strerror_r): Optimize, call
    strlen only if needed.

diff --git a/ChangeLog b/ChangeLog
index 2a9a361..879fe2d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-12-27  Bruno Haible  <bruno@clisp.org>
+
+	[BZ #14317]
+	* string/xpg-strerror.c (__xpg_strerror_r): Optimize, call strlen
+	only if needed.
+
 2012-12-27  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	* sysdeps/ieee754/dbl-64/mpexp.c (__mpexp): Eliminate __mpexp_nn
diff --git a/NEWS b/NEWS
index c00b555..bae3e41 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,8 @@ Version 2.18
 
 * The following bugs are resolved with this release:
 
+  14317.
+
 
 Version 2.17
 
diff --git a/string/xpg-strerror.c b/string/xpg-strerror.c
index 7e46b33..73600fb 100644
--- a/string/xpg-strerror.c
+++ b/string/xpg-strerror.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1993, 1995-1998, 2000, 2002, 2004, 2010, 2011
-   Free Software Foundation, Inc.
+/* Copyright (C) 1991-2012 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
@@ -28,20 +27,27 @@ int
 __xpg_strerror_r (int errnum, char *buf, size_t buflen)
 {
   const char *estr = __strerror_r (errnum, buf, buflen);
-  size_t estrlen = strlen (estr);
 
+  /* We know that __strerror_r returns buf (with a dynamically computed
+     string) if errnum is invalid, otherwise it returns a string whose
+     storage has indefinite extent.  */
   if (estr == buf)
     {
       assert (errnum < 0 || errnum >= _sys_nerr_internal
 	      || _sys_errlist_internal[errnum] == NULL);
       return EINVAL;
     }
-  assert (errnum >= 0 && errnum < _sys_nerr_internal
-	  && _sys_errlist_internal[errnum] != NULL);
+  else
+    {
+      assert (errnum >= 0 && errnum < _sys_nerr_internal
+	      && _sys_errlist_internal[errnum] != NULL);
+
+      size_t estrlen = strlen (estr);
 
-  /* Terminate the string in any case.  */
-  if (buflen > 0)
-    *((char *) __mempcpy (buf, estr, MIN (buflen - 1, estrlen))) = '\0';
+      /* Terminate the string in any case.  */
+      if (buflen > 0)
+	*((char *) __mempcpy (buf, estr, MIN (buflen - 1, estrlen))) = '\0';
 
-  return buflen <= estrlen ? ERANGE : 0;
+      return buflen <= estrlen ? ERANGE : 0;
+    }
 }

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog             |    6 ++++++
 NEWS                  |    2 ++
 string/xpg-strerror.c |   24 +++++++++++++++---------
 3 files changed, 23 insertions(+), 9 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]