From 0c7d2e0d00a7150dd7308e38758c98ada7d5f743 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 14 Jun 2015 18:46:00 +0200 Subject: [PATCH] DOn't use strcmp in check_shader_dir --- runloop.c | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/runloop.c b/runloop.c index 11bd78836a..cfa7caa7ee 100644 --- a/runloop.c +++ b/runloop.c @@ -19,6 +19,8 @@ #include #include +#include + #include "configuration.h" #include "dynamic.h" #include "performance.h" @@ -345,6 +347,11 @@ static bool check_movie(void) return check_movie_record(); } +#define SHADER_EXT_GLSL 0x7c976537U +#define SHADER_EXT_GLSLP 0x0f840c87U +#define SHADER_EXT_CG 0x0059776fU +#define SHADER_EXT_CGP 0x0b8865bfU + /** * check_shader_dir: * @pressed_next : was next shader key pressed? @@ -358,6 +365,7 @@ static bool check_movie(void) **/ static void check_shader_dir(bool pressed_next, bool pressed_prev) { + uint32_t ext_hash; char msg[PATH_MAX_LENGTH] = {0}; const char *shader = NULL; const char *ext = NULL; @@ -382,15 +390,24 @@ static void check_shader_dir(bool pressed_next, bool pressed_prev) else return; - shader = global->shader_dir.list->elems[global->shader_dir.ptr].data; - ext = path_get_extension(shader); + ext = path_get_extension(shader); + ext_hash = djb2_calculate(ext); + shader = global ? + global->shader_dir.list->elems[global->shader_dir.ptr].data : NULL; - if (strcmp(ext, "glsl") == 0 || strcmp(ext, "glslp") == 0) - type = RARCH_SHADER_GLSL; - else if (strcmp(ext, "cg") == 0 || strcmp(ext, "cgp") == 0) - type = RARCH_SHADER_CG; - else - return; + switch (ext_hash) + { + case SHADER_EXT_GLSL: + case SHADER_EXT_GLSLP: + type = RARCH_SHADER_GLSL; + break; + case SHADER_EXT_CG: + case SHADER_EXT_CGP: + type = RARCH_SHADER_CG; + break; + default: + return; + } snprintf(msg, sizeof(msg), "Shader #%u: \"%s\".", (unsigned)global->shader_dir.ptr, shader);