--- libecb/ecb.h 2011/05/30 18:30:00 1.30 +++ libecb/ecb.h 2011/05/31 21:10:37 1.31 @@ -184,7 +184,11 @@ ECB_HEADER_INLINE ecb_bool ecb_little_endian (void) ecb_const; ECB_HEADER_INLINE ecb_bool ecb_little_endian (void) { return ecb_byteorder_helper () == 0x44; }; -#define ecb_mod(m,n) ((m) < 0 ? ((n) - (-(m) % (n))) : ((m) % (n))) +#if ECB_GCC_VERSION(3,0)&&0 +# define ecb_mod(m,n) ((m) % (n) + ((m) % (n) < 0 ? (n) : 0)) +#else +# define ecb_mod(m,n) ((m) < 0 ? ((n) - 1 - ((-1 - (m)) % (n))) : ((m) % (n))) +#endif #if ecb_cplusplus_does_not_suck // does not work for local types (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm)