Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 6 Feb 2002 00:19:11 +0000 (00:19 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 6 Feb 2002 00:19:11 +0000 (00:19 +0000)
* elf/rtld.c (process_dl_debug): Correct printing help message.
* elf/dl-misc.c (_dl_debug_vdprintf): Implement precision handling
for %s.

ChangeLog
elf/dl-misc.c
elf/rtld.c

index de582c5..00c242b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2002-02-05  Ulrich Drepper  <drepper@redhat.com>
 
+       * elf/rtld.c (process_dl_debug): Correct printing help message.
+       * elf/dl-misc.c (_dl_debug_vdprintf): Implement precision handling
+       for %s.
+
        * inet/getnetgrent_r.c (innetgr): Add int* parameter to getfct
        definition and pass &errno in use of this variable.
        Reported by Simon Wilkinson <simon@sxw.org.uk> [PR libc/2911].
index ab883ac..364940b 100644 (file)
@@ -135,6 +135,7 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
          /* It is a format specifier.  */
          char fill = ' ';
          int width = -1;
+         int prec = -1;
 #if LONG_MAX != INT_MAX
          int long_mod = 0;
 #endif
@@ -154,6 +155,13 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
              ++fmt;
            }
 
+         /* Handle precision.  */
+         if (*fmt == '.' && fmt[1] == '*')
+           {
+             prec = va_arg (arg, int);
+             fmt += 2;
+           }
+
          /* Recognize the l modifier.  It is only important on some
             platforms where long and int have a different size.  We
             can use the same code for size_t.  */
@@ -202,6 +210,8 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
              /* Get the string argument.  */
              iov[niov].iov_base = va_arg (arg, char *);
              iov[niov].iov_len = strlen (iov[niov].iov_base);
+             if (prec != -1)
+               iov[niov].iov_len = MIN (prec, iov[niov].iov_len );
              ++niov;
              break;
 
index 3241cc9..436c81b 100644 (file)
@@ -258,11 +258,11 @@ _dl_start_final (void *arg, struct link_map *bootstrap_map_p,
     if (phdr[cnt].p_type == PT_TLS)
       {
        void *tlsblock;
-       size_t align = MAX (TLS_INIT_TCB_ALIGN,  phdr[cnt].p_align);
+       size_t align = MAX (TLS_INIT_TCB_ALIGN, phdr[cnt].p_align);
 
        GL(dl_rtld_map).l_tls_blocksize = phdr[cnt].p_memsz;
        GL(dl_rtld_map).l_tls_initimage_size = phdr[cnt].p_filesz;
-       GL(dl_rtld_map).l_tls_initimage = (void *) (bootstrap_map_p->l_addr
+       GL(dl_rtld_map).l_tls_initimage = (void *) (GL(dl_rtld_map).l_map_start
                                                    + phdr[cnt].p_offset);
 
        /* We can now allocate the initial TLS block.  This can happen
@@ -1476,8 +1476,8 @@ warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy);
 Valid options for the LD_DEBUG environment variable are:\n\n");
 
       for (cnt = 0; cnt < ndebopts; ++cnt)
-       _dl_printf ("  %s%s %s\n", debopts[cnt].name,
-                   "       " + strlen (debopts[cnt].name) - 3,
+       _dl_printf ("  %.*s%s%s\n", debopts[cnt].len, debopts[cnt].name,
+                   "         " + debopts[cnt].len - 3,
                    debopts[cnt].helptext);
 
       _dl_printf ("\n\