From feb40c4543d22468bb6dc7e3c29746ee2d4e06cc Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 20 Mar 2012 13:11:51 +0100 Subject: [PATCH] Partially revert last change Thank you Dmitry for spotting it. * ioctl.c (compare): Partially revert last change - the new comparison logic was buggy. Signed-off-by: Denys Vlasenko --- ioctl.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/ioctl.c b/ioctl.c index b6380938..dc412b6c 100644 --- a/ioctl.c +++ b/ioctl.c @@ -37,25 +37,7 @@ compare(const void *a, const void *b) { 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 *