]> granicus.if.org Git - strace/blobdiff - hdio.c
nlattr: add UID/GID netlink attribute decoders
[strace] / hdio.c
diff --git a/hdio.c b/hdio.c
index 1553825aa5b6a61fae76aef6d5495a220baa4a6d..9db1d26b5fdac60ea4c00115e3362d8abd0bb740 100644 (file)
--- a/hdio.c
+++ b/hdio.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
  * Copyright (c) 2011-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 "defs.h"
+
+#include DEF_MPERS_TYPE(struct_hd_geometry)
+
 #include <linux/hdreg.h>
 
-int
-hdio_ioctl(struct tcb *tcp, const unsigned int code, const long arg)
+typedef struct hd_geometry struct_hd_geometry;
+
+#include MPERS_DEFS
+
+MPERS_PRINTER_DECL(int, hdio_ioctl, struct tcb *const tcp,
+                  const unsigned int code, const kernel_ulong_t arg)
 {
        switch (code) {
        case HDIO_GETGEO:
                if (entering(tcp))
                        return 0;
                else {
-                       struct hd_geometry geo;
+                       struct_hd_geometry geo;
 
                        tprints(", ");
                        if (!umove_or_printaddr(tcp, arg, &geo))
                                tprintf("{heads=%u, sectors=%u, "
-                                       "cylinders=%u, start=%lu}",
-                                       (unsigned)geo.heads,
-                                       (unsigned)geo.sectors,
-                                       (unsigned)geo.cylinders,
-                                       geo.start);
+                                       "cylinders=%hu, start=%lu}",
+                                       (unsigned) geo.heads,
+                                       (unsigned) geo.sectors,
+                                       geo.cylinders,
+                                       (unsigned long) geo.start);
                }
                break;
        default:
                return RVAL_DECODED;
        }
 
-       return RVAL_DECODED | 1;
+       return RVAL_IOCTL_DECODED;
 }