From 3e8fc5620913bad76e3feaf49696482455f4ab70 Mon Sep 17 00:00:00 2001 From: EvilPudding Date: Tue, 23 Feb 2016 14:49:05 +0000 Subject: [PATCH 1/3] Optimized find_function --- tinyexpr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tinyexpr.c b/tinyexpr.c index bb44cf0..101a40c 100644 --- a/tinyexpr.c +++ b/tinyexpr.c @@ -99,7 +99,7 @@ static const builtin *find_function(const char *name, int len) { while (imax >= imin) { const int i = (imin + ((imax-imin)/2)); int c = strncmp(name, functions[i].name, len); - if (!c) c = len - strlen(functions[i].name); + if (!c) c = '\0' - functions[i].name[len]; if (c == 0) { return functions + i; } else if (c > 0) { From 60a852a1a364951bcc390a995c2433cea6e00b8f Mon Sep 17 00:00:00 2001 From: EvilPudding Date: Tue, 23 Feb 2016 15:13:50 +0000 Subject: [PATCH 2/3] Optimized find_var --- tinyexpr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tinyexpr.c b/tinyexpr.c index 101a40c..53f0c9b 100644 --- a/tinyexpr.c +++ b/tinyexpr.c @@ -117,7 +117,7 @@ static const double *find_var(const state *s, const char *name, int len) { int i; if (!s->lookup) return 0; for (i = 0; i < s->lookup_len; ++i) { - if (strlen(s->lookup[i].name) == len && strncmp(name, s->lookup[i].name, len) == 0) { + if (s->lookup[i].name[len] == '\0' && strncmp(name, s->lookup[i].name, len) == 0) { return s->lookup[i].value; } } From 682e9c1b346d44f27f3a455958fdd935f6aa5a43 Mon Sep 17 00:00:00 2001 From: EvilPudding Date: Tue, 23 Feb 2016 15:21:48 +0000 Subject: [PATCH 3/3] Fixed possible segmentation fault. --- tinyexpr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tinyexpr.c b/tinyexpr.c index 53f0c9b..5a44685 100644 --- a/tinyexpr.c +++ b/tinyexpr.c @@ -99,7 +99,7 @@ static const builtin *find_function(const char *name, int len) { while (imax >= imin) { const int i = (imin + ((imax-imin)/2)); int c = strncmp(name, functions[i].name, len); - if (!c) c = '\0' - functions[i].name[len]; + if (!c) c = '\0' - functions[i].name[len]; if (c == 0) { return functions + i; } else if (c > 0) { @@ -117,7 +117,7 @@ static const double *find_var(const state *s, const char *name, int len) { int i; if (!s->lookup) return 0; for (i = 0; i < s->lookup_len; ++i) { - if (s->lookup[i].name[len] == '\0' && strncmp(name, s->lookup[i].name, len) == 0) { + if (strncmp(name, s->lookup[i].name, len) == 0 && s->lookup[i].name[len] == '\0') { return s->lookup[i].value; } }