]> granicus.if.org Git - strace/commitdiff
2003-07-17 Roland McGrath <roland@redhat.com>
authorRoland McGrath <roland@redhat.com>
Thu, 17 Jul 2003 09:03:02 +0000 (09:03 +0000)
committerRoland McGrath <roland@redhat.com>
Thu, 17 Jul 2003 09:03:02 +0000 (09:03 +0000)
* linux/syscallent.h: Handle statfs64, fstatfs64, utimes.
* file.c (printstatfs): Print f_fsid and f_frsize.
[LINUX] (printstatfs64, sys_statfs64, sys_fstatfs64): New functions.
* linux/syscall.h: Add decls.
From Ulrich Drepper <drepper@redhat.com>.

file.c
linux/syscall.h

diff --git a/file.c b/file.c
index fe2bbbc752f7fcd809983a83f9b7b43c81cb3a24..8205d354c4e3ca4f8af1172d3b2e3c2c6cb53b85 100644 (file)
--- a/file.c
+++ b/file.c
@@ -1385,21 +1385,28 @@ long addr;
        tprintf("{f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, ",
                sprintfstype(statbuf.f_type),
                statbuf.f_bsize, statbuf.f_blocks, statbuf.f_bfree);
-       tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_namelen=%u",
-               statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree, statbuf.f_namelen);
+       tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_fsid={%d, %d}, f_namelen=%u",
+               statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree,
+               statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1],
+               statbuf.f_namelen);
 #else /* !ALPHA */
        tprintf("{f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, ",
                sprintfstype(statbuf.f_type),
                (unsigned long)statbuf.f_bsize,
                (unsigned long)statbuf.f_blocks,
                (unsigned long)statbuf.f_bfree);
-       tprintf("f_files=%lu, f_ffree=%lu",
+       tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d}",
+               (unsigned long)statbuf.f_bavail,
                (unsigned long)statbuf.f_files,
-               (unsigned long)statbuf.f_ffree);
+               (unsigned long)statbuf.f_ffree,
+               statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
 #ifdef LINUX
        tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
 #endif /* LINUX */
 #endif /* !ALPHA */
+#ifdef _STATFS_F_FRSIZE
+       tprintf(", f_frsize=%lu", (unsigned long)statbuf.f_frsize);
+#endif
        tprintf("}");
 }
 
@@ -1428,6 +1435,82 @@ struct tcb *tcp;
        return 0;
 }
 
+#ifdef LINUX
+static void
+printstatfs64(tcp, addr)
+struct tcb *tcp;
+long addr;
+{
+       struct statfs64 statbuf;
+
+       if (syserror(tcp) || !verbose(tcp)) {
+               tprintf("%#lx", addr);
+               return;
+       }
+       if (umove(tcp, addr, &statbuf) < 0) {
+               tprintf("{...}");
+               return;
+       }
+#ifdef ALPHA
+
+       tprintf("{f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, ",
+               sprintfstype(statbuf.f_type),
+               statbuf.f_bsize, statbuf.f_blocks, statbuf.f_bfree);
+       tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_fsid={%d, %d}, f_namelen=%u",
+               statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree,
+               statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1],
+               statbuf.f_namelen);
+#else /* !ALPHA */
+       tprintf("{f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, ",
+               sprintfstype(statbuf.f_type),
+               (unsigned long)statbuf.f_bsize,
+               (unsigned long)statbuf.f_blocks,
+               (unsigned long)statbuf.f_bfree);
+       tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d}",
+               (unsigned long)statbuf.f_bavail,
+               (unsigned long)statbuf.f_files,
+               (unsigned long)statbuf.f_ffree,
+               statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
+       tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
+#endif /* !ALPHA */
+#ifdef _STATFS_F_FRSIZE
+       tprintf(", f_frsize=%lu", (unsigned long)statbuf.f_frsize);
+#endif
+       tprintf("}");
+}
+
+int
+sys_statfs64(tcp)
+struct tcb *tcp;
+{
+       if (entering(tcp)) {
+               printpath(tcp, tcp->u_arg[0]);
+               tprintf(", %lu, ", tcp->u_arg[1]);
+       } else {
+               if (tcp->u_arg[1] == sizeof (struct statfs64))
+                       printstatfs64(tcp, tcp->u_arg[2]);
+               else
+                       tprintf("{???}");
+       }
+       return 0;
+}
+
+int
+sys_fstatfs64(tcp)
+struct tcb *tcp;
+{
+       if (entering(tcp)) {
+               tprintf("%lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1]);
+       } else {
+               if (tcp->u_arg[1] == sizeof (struct statfs64))
+                       printstatfs64(tcp, tcp->u_arg[2]);
+               else
+                       tprintf("{???}");
+       }
+       return 0;
+}
+#endif
+
 #if defined(LINUX) && defined(__alpha)
 
 int
index bc7b848049ef649bf060fd5b19c38d400992c82e..3c668e40da616eb34aa8b8e637857fcd0b8e0112 100644 (file)
@@ -92,8 +92,7 @@ int sys_set_thread_area(), sys_get_thread_area(), sys_remap_file_pages();
 int sys_timer_create(), sys_timer_delete(), sys_timer_getoverrun();
 int sys_timer_gettime(), sys_timer_settime(), sys_clock_settime();
 int sys_clock_gettime(), sys_clock_getres(), sys_clock_nanosleep();
-int sys_semtimedop();
-int sys_tgkill();
+int sys_semtimedop(), sys_statfs64(), sys_fstatfs64(), sys_tgkill();
 
 
 /* sys_socketcall subcalls */