]> granicus.if.org Git - strace/blobdiff - dirent.c
Fix the length argument passed from print_iovec to decode_netlink
[strace] / dirent.c
index de5a163d9445f142b9c4f367e501d68981651432..2ba6fe7abef6249f4a16e8a656dab16ad4aa5ba4 100644 (file)
--- a/dirent.c
+++ b/dirent.c
 
 #include DEF_MPERS_TYPE(kernel_dirent)
 
-#include "kernel_types.h"
-
 #include MPERS_DEFS
 
 #define D_NAME_LEN_MAX 256
 
 static void
-print_old_dirent(struct tcb *tcp, long addr)
+print_old_dirent(struct tcb *const tcp, const kernel_ulong_t addr)
 {
        kernel_dirent d;
 
@@ -48,8 +46,8 @@ print_old_dirent(struct tcb *tcp, long addr)
                return;
 
        tprintf("{d_ino=%llu, d_off=%llu, d_reclen=%u, d_name=",
-               (unsigned long long) d.d_ino,
-               (unsigned long long) d.d_off, d.d_reclen);
+               zero_extend_signed_to_ull(d.d_ino),
+               zero_extend_signed_to_ull(d.d_off), d.d_reclen);
        if (d.d_reclen > D_NAME_LEN_MAX)
                d.d_reclen = D_NAME_LEN_MAX;
        printpathn(tcp, addr + offsetof(kernel_dirent, d_name), d.d_reclen);
@@ -68,7 +66,7 @@ SYS_FUNC(readdir)
                        print_old_dirent(tcp, tcp->u_arg[1]);
                /* Not much point in printing this out, it is always 1. */
                if (tcp->u_arg[2] != 1)
-                       tprintf(", %lu", tcp->u_arg[2]);
+                       tprintf(", %" PRI_klu, tcp->u_arg[2]);
        }
        return 0;
 }
@@ -76,7 +74,7 @@ SYS_FUNC(readdir)
 SYS_FUNC(getdents)
 {
        unsigned int i, len, dents = 0;
-       char *buf;
+       unsigned char *buf;
 
        if (entering(tcp)) {
                printfd(tcp, tcp->u_arg[0]);
@@ -127,8 +125,9 @@ SYS_FUNC(getdents)
 
                        tprintf("%s{d_ino=%llu, d_off=%llu, d_reclen=%u"
                                ", d_name=", i ? ", " : "",
-                               (unsigned long long) d->d_ino,
-                               (unsigned long long) d->d_off, d->d_reclen);
+                               zero_extend_signed_to_ull(d->d_ino),
+                               zero_extend_signed_to_ull(d->d_off),
+                               d->d_reclen);
 
                        if (print_quoted_string(d->d_name, d_name_len,
                                                QUOTE_0_TERMINATED) > 0) {