Move ioctl syscall parser to ioctl.c
* io.c (sys_ioctl): Move ... * ioctl.c: ... here. (ioctl_lookup, ioctl_next_match, ioctl_print_code, ioctl_decode, ioctl_decode_command_number): Declare as static. * defs.h (ioctl_lookup, ioctl_next_match, ioctl_print_code, ioctl_decode, ioctl_decode_command_number): Remove.
This commit is contained in:
parent
e10b4f02eb
commit
044eef2186
5
defs.h
5
defs.h
@ -562,11 +562,6 @@ extern const char *sprint_open_modes(int);
|
||||
extern void print_loff_t(struct tcb *, long);
|
||||
extern void print_seccomp_filter(struct tcb *tcp, unsigned long);
|
||||
|
||||
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 ioctl_decode_command_number(const unsigned int);
|
||||
extern int block_ioctl(struct tcb *, const unsigned int, long);
|
||||
extern int evdev_ioctl(struct tcb *, const unsigned int, long);
|
||||
extern int loop_ioctl(struct tcb *, const unsigned int, long);
|
||||
|
29
io.c
29
io.c
@ -383,32 +383,3 @@ SYS_FUNC(vmsplice)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_FUNC(ioctl)
|
||||
{
|
||||
const struct_ioctlent *iop;
|
||||
|
||||
if (entering(tcp)) {
|
||||
printfd(tcp, tcp->u_arg[0]);
|
||||
tprints(", ");
|
||||
if (!ioctl_decode_command_number(tcp->u_arg[1])) {
|
||||
iop = ioctl_lookup(tcp->u_arg[1]);
|
||||
if (iop) {
|
||||
tprints(iop->symbol);
|
||||
while ((iop = ioctl_next_match(iop)))
|
||||
tprintf(" or %s", iop->symbol);
|
||||
} else {
|
||||
ioctl_print_code(tcp->u_arg[1]);
|
||||
}
|
||||
}
|
||||
ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]);
|
||||
}
|
||||
else {
|
||||
int ret = ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]);
|
||||
if (!ret)
|
||||
tprintf(", %#lx", tcp->u_arg[2]);
|
||||
else
|
||||
return ret - 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
39
ioctl.c
39
ioctl.c
@ -47,7 +47,7 @@ compare(const void *a, const void *b)
|
||||
return (code1 > code2) ? 1 : (code1 < code2) ? -1 : 0;
|
||||
}
|
||||
|
||||
const struct_ioctlent *
|
||||
static const struct_ioctlent *
|
||||
ioctl_lookup(const unsigned int code)
|
||||
{
|
||||
struct_ioctlent *iop;
|
||||
@ -64,7 +64,7 @@ ioctl_lookup(const unsigned int code)
|
||||
return iop;
|
||||
}
|
||||
|
||||
const struct_ioctlent *
|
||||
static const struct_ioctlent *
|
||||
ioctl_next_match(const struct_ioctlent *iop)
|
||||
{
|
||||
const unsigned int code = iop->code;
|
||||
@ -74,7 +74,7 @@ ioctl_next_match(const struct_ioctlent *iop)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
ioctl_print_code(const unsigned int code)
|
||||
{
|
||||
tprints("_IOC(");
|
||||
@ -181,7 +181,7 @@ hiddev_decode_number(unsigned int arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
ioctl_decode_command_number(unsigned int arg)
|
||||
{
|
||||
switch (_IOC_TYPE(arg)) {
|
||||
@ -221,7 +221,7 @@ ioctl_decode_command_number(unsigned int arg)
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
ioctl_decode(struct tcb *tcp, unsigned int code, long arg)
|
||||
{
|
||||
switch (_IOC_TYPE(code)) {
|
||||
@ -263,3 +263,32 @@ ioctl_decode(struct tcb *tcp, unsigned int code, long arg)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_FUNC(ioctl)
|
||||
{
|
||||
const struct_ioctlent *iop;
|
||||
|
||||
if (entering(tcp)) {
|
||||
printfd(tcp, tcp->u_arg[0]);
|
||||
tprints(", ");
|
||||
if (!ioctl_decode_command_number(tcp->u_arg[1])) {
|
||||
iop = ioctl_lookup(tcp->u_arg[1]);
|
||||
if (iop) {
|
||||
tprints(iop->symbol);
|
||||
while ((iop = ioctl_next_match(iop)))
|
||||
tprintf(" or %s", iop->symbol);
|
||||
} else {
|
||||
ioctl_print_code(tcp->u_arg[1]);
|
||||
}
|
||||
}
|
||||
ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]);
|
||||
}
|
||||
else {
|
||||
int ret = ioctl_decode(tcp, tcp->u_arg[1], tcp->u_arg[2]);
|
||||
if (!ret)
|
||||
tprintf(", %#lx", tcp->u_arg[2]);
|
||||
else
|
||||
return ret - 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user