# error You do not have strncasecmp on your system.
#endif /* HAVE_STRNCASECMP */
+/* The following helper functions are used to speed up parsing. They
+ * are faster than their ctype counterparts because they assume that
+ * the input is in ASCII and that the locale is set to "C". The
+ * compiler will also inline these functions, providing an additional
+ * speedup by saving on function calls.
+ */
+static int is_ws_char(char c)
+{
+ return c == ' '
+ || c == '\t'
+ || c == '\n'
+ || c == '\v'
+ || c == '\f'
+ || c == '\r';
+}
+
/* Use C99 NAN by default; if not available, nan("") should work too. */
#ifndef NAN
#define NAN nan("")
case json_tokener_state_eatws:
/* Advance until we change state */
- while (isspace((unsigned char)c)) {
+ while (is_ws_char(c)) {
if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok)))
goto out;
}