@@ -143,7 +143,7 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
++fmt;
}
- /* See whether with comes from a parameter. Note that no other
+ /* See whether width comes from a parameter. Note that no other
way to specify the width is implemented. */
if (*fmt == '*')
{
@@ -205,9 +205,10 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
case 's':
/* 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 ((size_t) prec, iov[niov].iov_len);
+ iov[niov].iov_len = strnlen (iov[niov].iov_base, (size_t) prec);
+ else
+ iov[niov].iov_len = strlen (iov[niov].iov_base);
++niov;
break;
@@ -2404,10 +2404,11 @@ process_dl_debug (const char *dl_debug)
if (cnt == ndebopts)
{
/* Display a warning and skip everything until next
- separator. */
- char *copy = strndupa (dl_debug, len);
- _dl_error_printf ("\
-warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy);
+ separator. */
+ int deblen = MIN(len, 100);
+ _dl_error_printf ("warning: debug option '%.*s%s' unknown;"
+ " try LD_DEBUG=help\n",
+ deblen, dl_debug, len <= 100 ? "" : "...");
}
dl_debug += len;