* defs.h (ioctl_print_code): New prototype.
* ioctl.c: Include xlat/ioctl_dirs.h.
(ioctl_print_code): New function.
* io.c (sys_ioctl): Use it.
* xlat/ioctl_dirs.in: New file.
extern const struct_ioctlent *ioctl_lookup(const unsigned int);
extern const struct_ioctlent *ioctl_next_match(const struct_ioctlent *);
+extern void ioctl_print_code(const unsigned int);
extern int ioctl_decode(struct tcb *, const unsigned int, long);
extern int block_ioctl(struct tcb *, const unsigned int, long);
extern int loop_ioctl(struct tcb *, const unsigned int, long);
while ((iop = ioctl_next_match(iop)))
tprintf(" or %s", iop->symbol);
} else
- tprintf("%#lx", tcp->u_arg[1]);
+ ioctl_print_code(tcp->u_arg[1]);
ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]);
}
else {
#include "defs.h"
#include <asm/ioctl.h>
+#include "xlat/ioctl_dirs.h"
static int
compare(const void *a, const void *b)
return NULL;
}
+void
+ioctl_print_code(const unsigned int code)
+{
+ tprints("_IOC(");
+ printflags(ioctl_dirs, _IOC_DIR(code), "_IOC_???");
+ tprintf(", 0x%02x, 0x%02x, 0x%02x)",
+ _IOC_TYPE(code), _IOC_NR(code), _IOC_SIZE(code));
+}
+
int
ioctl_decode(struct tcb *tcp, unsigned int code, long arg)
{
--- /dev/null
+_IOC_READ
+_IOC_WRITE
+_IOC_NONE