From: Rich Felker Date: Sat, 29 Jun 2013 17:57:13 +0000 (-0400) Subject: fix shifts possibly larger than type in major() macro X-Git-Tag: v0.9.11~2 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=9b732fe51b814468a08c84d13238b4c83a42451a;p=oweals%2Fmusl.git fix shifts possibly larger than type in major() macro in theory this should not be an issue, since major() should only be applied to type dev_t, which is 64-bit. however, it appears some applications are not using dev_t but a smaller integer type (which works on Linux because the kernel's dev_t is really only 32-bit). to avoid the undefined behavior, do it as two shifts. --- diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h index d6c6aef6..07a3ef18 100644 --- a/include/sys/sysmacros.h +++ b/include/sys/sysmacros.h @@ -2,7 +2,7 @@ #define _SYS_SYSMACROS_H #define major(x) \ - ((unsigned)( (((x)>>32) & 0xfffff000) | (((x)>>8) & 0x00000fff) )) + ((unsigned)( (((x)>>31>>1) & 0xfffff000) | (((x)>>8) & 0x00000fff) )) #define minor(x) \ ((unsigned)( (((x)>>12) & 0xffffff00) | ((x) & 0x000000ff) ))