From 6520ab54b002c9374c2e0a0339036b167c40f74c Mon Sep 17 00:00:00 2001 From: s1lent Date: Thu, 29 Aug 2019 01:29:18 +0700 Subject: [PATCH] Reworked COM_FileExtension (Fixed #716) --- rehlds/HLTV/common/common.cpp | 18 ++++++++++++++++++ rehlds/engine/common.cpp | 19 ++++++++++++++++++- rehlds/public/strtools.h | 2 ++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/rehlds/HLTV/common/common.cpp b/rehlds/HLTV/common/common.cpp index 8b4b3d8..84916cf 100644 --- a/rehlds/HLTV/common/common.cpp +++ b/rehlds/HLTV/common/common.cpp @@ -201,6 +201,23 @@ void COM_DefaultExtension(char *path, char *extension) char *COM_FileExtension(char *in) { +#ifdef HLTV_FIXES + char *src = in + Q_strlen(in) - 1; + + // back up until a . or the start + while (src != in && *(src - 1) != '.') + { + src--; + } + + // check to see if the '.' is part of a input buffer + if (src == in || PATHSEPARATOR(*src)) + { + return ""; // no extension + } + + return src; +#else // #ifdef HLTV_FIXES static char exten[MAX_PATH]; char *c, *d = nullptr; int i; @@ -235,6 +252,7 @@ char *COM_FileExtension(char *in) exten[i] = '\0'; return exten; +#endif // #ifdef HLTV_FIXES } char com_token[COM_TOKEN_LEN]; diff --git a/rehlds/engine/common.cpp b/rehlds/engine/common.cpp index ece608b..b5d90ac 100644 --- a/rehlds/engine/common.cpp +++ b/rehlds/engine/common.cpp @@ -1354,6 +1354,23 @@ void COM_StripExtension(char *in, char *out) char *COM_FileExtension(char *in) { +#ifdef REHLDS_FIXES + char *src = in + Q_strlen(in) - 1; + + // back up until a . or the start + while (src != in && *(src - 1) != '.') + { + src--; + } + + // check to see if the '.' is part of a input buffer + if (src == in || PATHSEPARATOR(*src)) + { + return ""; // no extension + } + + return src; +#else // #ifdef REHLDS_FIXES static char exten[MAX_PATH]; char *c, *d = NULL; int i; @@ -1385,8 +1402,8 @@ char *COM_FileExtension(char *in) exten[i] = *d; } exten[i] = 0; - return exten; +#endif // #ifdef REHLDS_FIXES } // Fills "out" with the file name without path and extension. diff --git a/rehlds/public/strtools.h b/rehlds/public/strtools.h index 5cdf8c4..cf4c0df 100644 --- a/rehlds/public/strtools.h +++ b/rehlds/public/strtools.h @@ -29,9 +29,11 @@ #pragma once #ifdef _WIN32 +#define PATHSEPARATOR(c) ((c) == '\\' || (c) == '/') const char CORRECT_PATH_SEPARATOR = '\\'; const char INCORRECT_PATH_SEPARATOR = '/'; #else +#define PATHSEPARATOR(c) ((c) == '/') const char CORRECT_PATH_SEPARATOR = '/'; const char INCORRECT_PATH_SEPARATOR = '\\'; #endif