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].
/* It is a format specifier. */
char fill = ' ';
int width = -1;
+ int prec = -1;
#if LONG_MAX != INT_MAX
int long_mod = 0;
#endif
++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. */
/* 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;
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
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\