time_after是不是有bug
之前内核time_after定义为:
#define time_after(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)(b) - (long)(a) < 0)
若a,b为unsigned char型,该宏简化成
#define time_after(a, b) ((char)(b)-(char)(a)<0)
当a = 130, b = 125时,理论上该宏应该返回真,但是a转化成char型后为-126,b转化成char型后仍为125, 此时b - a = 125-(-126)=251>0, 该宏返回假!!!!所以说这个宏是不是有bug。
我查看了最新的内核,发现该宏的定义变成
之前内核time_after定义为:
#define time_after(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)((b) - (a) )< 0)
就是先相减,再进行类型转换了,这样就没有问题了!!!
所以我想问,之前内核的time_after是不是有bug?????????