|
@@ -32,6 +32,20 @@
|
|
#include <ctype.h>
|
|
#include <ctype.h>
|
|
#include "cJSON.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;
|
|
static const char *global_ep;
|
|
|
|
|
|
const char *cJSON_GetErrorPtr(void)
|
|
const char *cJSON_GetErrorPtr(void)
|
|
@@ -207,8 +221,15 @@ static int pow2gt (int x)
|
|
x |= x >> 1;
|
|
x |= x >> 1;
|
|
x |= x >> 2;
|
|
x |= x >> 2;
|
|
x |= x >> 4;
|
|
x |= x >> 4;
|
|
|
|
+#if INTEGER_SIZE & 0x1110 /* at least 16 bit */
|
|
x |= x >> 8;
|
|
x |= x >> 8;
|
|
|
|
+#endif
|
|
|
|
+#if INTEGER_SIZE & 0x1100 /* at least 32 bit */
|
|
x |= x >> 16;
|
|
x |= x >> 16;
|
|
|
|
+#endif
|
|
|
|
+#if INT_SIZE & 0x1000 /* 64 bit */
|
|
|
|
+ x |= x >> 32;
|
|
|
|
+#endif
|
|
|
|
|
|
return x + 1;
|
|
return x + 1;
|
|
}
|
|
}
|