Just small refactoring. Replacing self-made function with functions
from standard headers.
Index: JSON_parser.c
RCS file: /repository/php-src/ext/json/JSON_parser.c,v
retrieving revision 1.1.2.8
diff -u -u -r1.1.2.8 JSON_parser.c
--- JSON_parser.c 24 May 2007 22:37:59 -0000 1.1.2.8
+++ JSON_parser.c 24 May 2007 23:41:11 -0000
@@ -29,6 +29,8 @@
#include "JSON_parser.h"
#include <stdio.h>
+#include <math.h>
+#include <ctype.h>
#define true 1
#define false 0
@@ -259,18 +261,10 @@
static int dehexchar(char c)
{
- if (c >= '0' && c <= '9')
- {
-
return c - '0';
- }
- else if (c >= 'A' && c <= 'F')
- {
-
return c - ('A' - 10);
- }
- else if (c >= 'a' && c <= 'f')
- {
-
return c - ('a' - 10);
- }
- if (isxdigit(c))
- {
-
return strtol(&c, NULL, 16);
- }
else
{
return -1;
I think the current code is better and not to mention faster. Shorter
code in this case does not mean better code.
Just small refactoring. Replacing self-made function with functions
from standard headers.Index: JSON_parser.c
RCS file: /repository/php-src/ext/json/JSON_parser.c,v
retrieving revision 1.1.2.8
diff -u -u -r1.1.2.8 JSON_parser.c
--- JSON_parser.c 24 May 2007 22:37:59 -0000 1.1.2.8
+++ JSON_parser.c 24 May 2007 23:41:11 -0000
@@ -29,6 +29,8 @@#include "JSON_parser.h"
#include <stdio.h>
+#include <math.h>
+#include <ctype.h>#define true 1
#define false 0
@@ -259,18 +261,10 @@static int dehexchar(char c)
{
- if (c >= '0' && c <= '9')
- {
return c - '0';
- }
- else if (c >= 'A' && c <= 'F')
- {
return c - ('A' - 10);
- }
- else if (c >= 'a' && c <= 'f')
- {
return c - ('a' - 10);
- }
- if (isxdigit(c))
- {
return strtol(&c, NULL, 16);
- }
else
{
return -1;--
Ilia Alshanetsky
What prompted this? I'm not keen on changing the parser unless there is
some benefit. Speed, portability, fixing a reported issue, etc. The
one risk I see here is that isxdigit() is a LOCALE-aware function, so
first, it is likely slower than what it replaces here, and second, a
messed up LOCALE could potentially cause it to misbehave.
-Rasmus
Martin Majlis wrote:
Just small refactoring. Replacing self-made function with functions
from standard headers.Index: JSON_parser.c
RCS file: /repository/php-src/ext/json/JSON_parser.c,v
retrieving revision 1.1.2.8
diff -u -u -r1.1.2.8 JSON_parser.c
--- JSON_parser.c 24 May 2007 22:37:59 -0000 1.1.2.8
+++ JSON_parser.c 24 May 2007 23:41:11 -0000
@@ -29,6 +29,8 @@#include "JSON_parser.h"
#include <stdio.h>
+#include <math.h>
+#include <ctype.h>#define true 1
#define false 0
@@ -259,18 +261,10 @@static int dehexchar(char c)
{
- if (c >= '0' && c <= '9')
- {
return c - '0';
- }
- else if (c >= 'A' && c <= 'F')
- {
return c - ('A' - 10);
- }
- else if (c >= 'a' && c <= 'f')
- {
return c - ('a' - 10);
- }
- if (isxdigit(c))
- {
return strtol(&c, NULL, 16);
- }
else
{
return -1;
I make some small test.
http://martin.m-core.net/misc/php/dehex.c - source code
cc dehex.c; for i in seq 1 1000
; do ./a.out >> dehex.log; done
http://martin.m-core.net/misc/php/dehex.log - results
I ignore values greater than 4e9. And here is summary:
http://martin.m-core.net/misc/php/dehex.php
Source of PHP script: http://martin.m-core.net/misc/php/dehex.phps
So, m1 is very slow, but other ones are faster.
Martin Majlis
Just small refactoring. Replacing self-made function with functions
from standard headers.Index: JSON_parser.c
RCS file: /repository/php-src/ext/json/JSON_parser.c,v
retrieving revision 1.1.2.8
diff -u -u -r1.1.2.8 JSON_parser.c
--- JSON_parser.c 24 May 2007 22:37:59 -0000 1.1.2.8
+++ JSON_parser.c 24 May 2007 23:41:11 -0000
@@ -29,6 +29,8 @@#include "JSON_parser.h"
#include <stdio.h>
+#include <math.h>
+#include <ctype.h>#define true 1
#define false 0
@@ -259,18 +261,10 @@static int dehexchar(char c)
{
- if (c >= '0' && c <= '9')
- {
return c - '0';
- }
- else if (c >= 'A' && c <= 'F')
- {
return c - ('A' - 10);
- }
- else if (c >= 'a' && c <= 'f')
- {
return c - ('a' - 10);
- }
- if (isxdigit(c))
- {
return strtol(&c, NULL, 16);
- }
else
{
return -1;