Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 31 Dec 2003 11:17:09 +0000 (11:17 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 31 Dec 2003 11:17:09 +0000 (11:17 +0000)
2003-12-31  Ulrich Drepper  <drepper@redhat.com>

* elf/dl-dst.h (DL_DST_REQUIRED): Avoid the complex operations if
CNT == 0.

ChangeLog
elf/dl-dst.h

index bc0b18a..614445d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-12-31  Ulrich Drepper  <drepper@redhat.com>
+
+       * elf/dl-dst.h (DL_DST_REQUIRED): Avoid the complex operations if
+       CNT == 0.
+
 2003-12-30  Jakub Jelinek  <jakub@redhat.com>
 
        * posix/regexec.c (get_subexp): Only set bkref_str after the first
index dc11e36..4f0669d 100644 (file)
@@ -1,5 +1,5 @@
 /* Handling of dynamic sring tokens.
-   Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2002, 2003 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
@@ -37,28 +37,35 @@ extern size_t _dl_dst_count_internal (const char *name, int is_path);
 /* Guess from the number of DSTs the length of the result string.  */
 #define DL_DST_REQUIRED(l, name, len, cnt) \
   ({                                                                         \
-    size_t origin_len;                                                       \
     size_t __len = (len);                                                    \
+    size_t __cnt = (cnt);                                                    \
                                                                              \
-    /* Now we make a guess how many extra characters on top of the length     \
-       of S we need to represent the result.  We know that we have CNT       \
-       replacements.  Each at most can use                                   \
-         MAX (strlen (ORIGIN), strlen (_dl_platform))                        \
-       minus 7 (which is the length of "$ORIGIN").                           \
-                                                                             \
-       First get the origin string if it is not available yet.  This can      \
-       only happen for the map of the executable.  */                        \
-    if ((l)->l_origin == NULL)                                               \
+    if (__cnt > 0)                                                           \
       {                                                                              \
-       assert ((l)->l_name[0] == '\0');                                      \
-       (l)->l_origin = _dl_get_origin ();                                    \
-       origin_len = ((l)->l_origin && (l)->l_origin != (char *) -1           \
-                     ? strlen ((l)->l_origin) : 0);                          \
+       size_t origin_len;                                                    \
+       /* Now we make a guess how many extra characters on top of the        \
+          length of S we need to represent the result.  We know that         \
+          we have CNT replacements.  Each at most can use                    \
+            MAX (strlen (ORIGIN), strlen (_dl_platform))                     \
+          minus 7 (which is the length of "$ORIGIN").                        \
+                                                                             \
+          First get the origin string if it is not available yet.            \
+          This can only happen for the map of the executable.  */            \
+       if ((l)->l_origin == NULL)                                            \
+         {                                                                   \
+           assert ((l)->l_name[0] == '\0');                                  \
+           (l)->l_origin = _dl_get_origin ();                                \
+           origin_len = ((l)->l_origin && (l)->l_origin != (char *) -1       \
+                         ? strlen ((l)->l_origin) : 0);                      \
+         }                                                                   \
+       else                                                                  \
+         origin_len = (l)->l_origin == (char *) -1                           \
+           ? 0 : strlen ((l)->l_origin);                                     \
+                                                                             \
+       __len += __cnt * (MAX (origin_len, GL(dl_platformlen)) - 7);          \
       }                                                                              \
-    else                                                                     \
-      origin_len = (l)->l_origin == (char *) -1 ? 0 : strlen ((l)->l_origin); \
                                                                              \
-    __len + cnt * (MAX (origin_len, GL(dl_platformlen)) - 7); })
+    __len; })
 
 /* Find origin of the executable.  */
 extern const char *_dl_get_origin (void);