pow2gt: Detect integer size fix #27

This commit is contained in:
Max Bruckner 2016-11-07 20:09:08 +07:00
parent 3ea491c0a6
commit b4d728d018
1 changed files with 21 additions and 0 deletions

21
cJSON.c
View File

@ -32,6 +32,20 @@
#include <ctype.h>
#include "cJSON.h"
/* Determine the number of bits that an integer has using the preprocessor */
#if INT_MAX == 32767
/* 16 bits */
#define INTEGER_SIZE 0x0010
#elif INT_MAX == 2147483647
/* 32 bits */
#define INTEGER_SIZE 0x0100
#elif INT_MAX == 9223372036854775807
/* 64 bits */
#define INTEGER_SIZE 0x1000
#else
#error "Failed to determine the size of an integer"
#endif
static const char *global_ep;
const char *cJSON_GetErrorPtr(void)
@ -207,8 +221,15 @@ static int pow2gt (int x)
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
#if INTEGER_SIZE & 0x1110 /* at least 16 bit */
x |= x >> 8;
#endif
#if INTEGER_SIZE & 0x1100 /* at least 32 bit */
x |= x >> 16;
#endif
#if INT_SIZE & 0x1000 /* 64 bit */
x |= x >> 32;
#endif
return x + 1;
}