static int ioctl_decode_command_number(struct tcb *tcp) { const unsigned int code = tcp->u_arg[1]; switch (_IOC_TYPE(code)) { case 'E': return evdev_decode_number(code); case 'H': return hiddev_decode_number(code); case 'M': if (_IOC_DIR(code) == _IOC_WRITE) { tprintf("MIXER_WRITE(%u)", _IOC_NR(code)); return 1; } else if (_IOC_DIR(code) == _IOC_READ) { tprintf("MIXER_READ(%u)", _IOC_NR(code)); return 1; } return 0; case 'U': if (_IOC_DIR(code) == _IOC_READ && _IOC_NR(code) == 0x2c) { tprintf("UI_GET_SYSNAME(%u)", _IOC_SIZE(code)); return 1; } return 0; case 'j': if (_IOC_DIR(code) == _IOC_READ && _IOC_NR(code) == 0x13) { tprintf("JSIOCGNAME(%u)", _IOC_SIZE(code)); return 1; } return 0; case 'k': if (_IOC_DIR(code) == _IOC_WRITE && _IOC_NR(code) == 0) { tprintf("SPI_IOC_MESSAGE(%u)", _IOC_SIZE(code)); return 1; } return 0; default: return 0; } }
int ioctl_decode_command_number(unsigned int arg) { switch (_IOC_TYPE(arg)) { case 'E': return evdev_decode_number(arg); case 'H': return hiddev_decode_number(arg); case 'M': if (_IOC_DIR(arg) == _IOC_WRITE) { tprintf("MIXER_WRITE(%u)", _IOC_NR(arg)); return 1; } else if (_IOC_DIR(arg) == _IOC_READ) { tprintf("MIXER_READ(%u)", _IOC_NR(arg)); return 1; } return 0; case 'U': if (_IOC_DIR(arg) == _IOC_READ && _IOC_NR(arg) == 0x2c) { tprintf("UI_GET_SYSNAME(%u)", _IOC_SIZE(arg)); return 1; } return 0; case 'j': if (_IOC_DIR(arg) == _IOC_READ && _IOC_NR(arg) == 0x13) { tprintf("JSIOCGNAME(%u)", _IOC_SIZE(arg)); return 1; } return 0; case 'k': if (_IOC_DIR(arg) == _IOC_WRITE && _IOC_NR(arg) == 0) { tprintf("SPI_IOC_MESSAGE(%u)", _IOC_SIZE(arg)); return 1; } return 0; default: return 0; } }