safecast.h revision 293896
1#ifndef SAFECAST_H 2#define SAFECAST_H 3 4#include <limits.h> 5static inline int size2int_chk(size_t v) 6{ 7 if (v > INT_MAX) 8 abort(); 9 return (int)(v); 10} 11 12static inline int size2int_sat(size_t v) 13{ 14 return (v > INT_MAX) ? INT_MAX : (int)v; 15} 16 17/* Compilers can emit warning about increased alignment requirements 18 * when casting pointers. The impact is tricky: on machines where 19 * alignment is just a performance issue (x86,x64,...) this might just 20 * cause a performance penalty. On others, an address error can occur 21 * and the process dies... 22 * 23 * Still, there are many cases where the pointer arithmetic and the 24 * buffer alignment make sure this does not happen. OTOH, the compiler 25 * doesn't know this and still emits warnings. 26 * 27 * The following cast macros are going through void pointers to tell 28 * the compiler that there is no alignment requirement to watch. 29 */ 30#define UA_PTR(ptype,pval) ((ptype *)(void*)(pval)) 31#define UAC_PTR(ptype,pval) ((const ptype *)(const void*)(pval)) 32#define UAV_PTR(ptype,pval) ((volatile ptype *)(volatile void*)(pval)) 33 34#endif 35