{
unsigned long code1 = (long) a;
unsigned long code2 = ((struct ioctlent *) b)->code;
-
- /* Simply returning (code1 - code2) may be wrong.
- * Exmaple: 0xffffffff - 0 = 0xffffffff = -1.
- * Need to shift both values down until they both fit
- * in positive int.
- */
- while ((code1|code2) > INT_MAX) {
-#if INT_MAX == LONG_MAX
- /* this case is easy */
- code1 >>= 1;
- code2 >>= 1;
- break;
-#else
- /* Remove INT_MAX worth of bits, then check again */
- code1 >>= sizeof(int) * 8 - 1;
- code2 >>= sizeof(int) * 8 - 1;
-#endif
- }
- return (int)code1 - (int)code2;
+ return (code1 > code2) ? 1 : (code1 < code2) ? -1 : 0;
}
const struct ioctlent *