为什么uaccess.h中的access_ok宏的实现没有使用它的所有参数?

时间:2014-04-07 18:07:19

标签: c unix macros kernel ioctl

/urs/src/linux-header-#version/arch/x86/include/asm/uaccess.h中的以下代码用" type"定义宏access_ok。作为一个论点。但是,此宏的定义不在任何地方使用此参数。

#define access_ok(type, addr, size) (likely(__range_not_ok(addr, size) == 0))

我错过了什么吗? "类型"应该有两个可能的值:     #define VERIFY_READ 0     #define VERIFY_WRITE 1

我唯一的解释是这是为了保持一致性。 (在不同的平台上,"类型"可能会在access_ok的实现中考虑到这一点。)

1 个答案:

答案 0 :(得分:0)

宏的实现不使用它的事实是一个实现细节。根据所有三个参数,access_ok 逻辑所做的是答案;只是碰巧x86(和大多数其他平台)的答案实际上并不需要考虑type。 (在某些平台上,实现不会将任何参数考虑在内,只返回1.在其他平台上,例如UML,确实使用了type。) access_ok是抽象API的一部分,它应该跨平台保持一致,而type是Linux抽象模型中内存的属性,因此参数是必需的。

“一致性”是一个正确的结论,但是从错误的前提出发:API由系统的抽象可移植模型决定,模型包括type。在这种情况下,实现的责任是遵循API,而不是API,以弯曲到实现的细节。