]> granicus.if.org Git - strace/blobdiff - tests/xstatfsx.c
tests: extend TEST_NETLINK_OBJECT macro
[strace] / tests / xstatfsx.c
index 8e54fce522d8577696963aadc4c52b7f3f117037..33254dd9078e9af18d079763c217db6123b1d4d4 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include "xlat/statfs_flags.h"
 
 #define PRINT_NUM(arg)                                                 \
-       if (sizeof(b->arg) == sizeof(int))                              \
-               printf(", %s=%u", #arg, (unsigned int) b->arg);         \
-       else if (sizeof(b->arg) == sizeof(long))                                \
-               printf(", %s=%lu", #arg, (unsigned long) b->arg);       \
-       else                                                            \
-               printf(", %s=%llu", #arg, (unsigned long long) b->arg)
+       do {                                                            \
+               if (sizeof(b->arg) == sizeof(int))                      \
+                       printf(", %s=%u", #arg,                         \
+                              (unsigned int) b->arg);                  \
+               else if (sizeof(b->arg) == sizeof(long))                \
+                       printf(", %s=%lu", #arg,                        \
+                              (unsigned long) b->arg);                 \
+               else                                                    \
+                       printf(", %s=%llu", #arg,                       \
+                              (unsigned long long) b->arg);            \
+       } while (0)
 
 static void
 print_statfs_type(const char *const prefix, const unsigned int magic)
@@ -62,9 +68,9 @@ print_statfs(const char *const sample, const char *magic_str)
 {
        int fd = open(sample, O_RDONLY);
        if (fd < 0)
-               perror_msg_and_fail("open: %s", sample);
+               perror_msg_and_skip("open: %s", sample);
 
-       STRUCT_STATFS *const b = tail_alloc(sizeof(*b));
+       TAIL_ALLOC_OBJECT_CONST_PTR(STRUCT_STATFS, b);
        long rc = SYSCALL_INVOKE(sample, fd, b, sizeof(*b));
        if (rc)
                perror_msg_and_skip(SYSCALL_NAME);
@@ -81,7 +87,8 @@ print_statfs(const char *const sample, const char *magic_str)
        PRINT_NUM(f_files);
        PRINT_NUM(f_ffree);
 #ifdef PRINT_F_FSID
-       printf(", f_fsid={%u, %u}", b->PRINT_F_FSID[0], b->PRINT_F_FSID[1]);
+       printf(", f_fsid={val=[%u, %u]}",
+              (unsigned) b->PRINT_F_FSID[0], (unsigned) b->PRINT_F_FSID[1]);
 #endif
        PRINT_NUM(f_namelen);
 #ifdef PRINT_F_FRSIZE
@@ -104,14 +111,16 @@ main(void)
        print_statfs(".", NULL);
 
        long rc = SYSCALL_INVOKE("", -1, 0, sizeof(STRUCT_STATFS));
+       const char *errstr = sprintrc(rc);
        PRINT_SYSCALL_HEADER("", -1, sizeof(STRUCT_STATFS));
-       printf("NULL) = %ld %s (%m)\n", rc, errno2name());
+       printf("NULL) = %s\n", errstr);
 
 #ifdef CHECK_ODD_SIZE
-       const unsigned long addr = (unsigned long) 0xfacefeeddeadbeef;
+       const unsigned long addr = (unsigned long) 0xfacefeeddeadbeefULL;
        rc = SYSCALL_INVOKE("", -1, addr, sizeof(STRUCT_STATFS) + 1);
+       errstr = sprintrc(rc);
        PRINT_SYSCALL_HEADER("", -1, sizeof(STRUCT_STATFS) + 1);
-       printf("%#lx) = %ld %s (%m)\n", addr, rc, errno2name());
+       printf("%#lx) = %s\n", addr, errstr);
 #endif
 
        puts("+++ exited with 0 +++");