From de41853bcf5b386b8ad9a6757522ec067e7f3858 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Tue, 25 Jul 2023 14:56:37 +0200 Subject: [PATCH] svg_loader: custom strndup moved into utils The custom _strndup was used only in one file as an internal function and wasn't accessible in other parts of the code. Now function is available as svgUtilStrndup. --- src/loaders/svg/tvgSvgLoader.cpp | 11 ++--------- src/loaders/svg/tvgSvgUtil.cpp | 13 +++++++++++++ src/loaders/svg/tvgSvgUtil.h | 2 ++ src/loaders/svg/tvgXmlParser.cpp | 13 +++---------- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index 246b632d..b6bfdf73 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -392,15 +392,8 @@ static char* _idFromUrl(const char* url) int i = 0; while (url[i] > ' ' && url[i] != ')' && url[i] != '\'') ++i; - - //custom strndup() for portability - int len = strlen(url); - if (i < len) len = i; - - auto ret = (char*) malloc(len + 1); - if (!ret) return 0; - ret[len] = '\0'; - return (char*) memcpy(ret, url, len); + + return svgUtilStrndup(url, i); } diff --git a/src/loaders/svg/tvgSvgUtil.cpp b/src/loaders/svg/tvgSvgUtil.cpp index 12d20c97..2c0b2bef 100644 --- a/src/loaders/svg/tvgSvgUtil.cpp +++ b/src/loaders/svg/tvgSvgUtil.cpp @@ -275,3 +275,16 @@ string svgUtilBase64Decode(const char *src) } return decoded; } + + +char* svgUtilStrndup(const char* str, size_t n) +{ + int len = strlen(str); + if (len < n) n = len; + + auto ret = (char*)malloc(n + 1); + if (!ret) return nullptr; + ret[n] = '\0'; + + return (char*)memcpy(ret, str, n); +} \ No newline at end of file diff --git a/src/loaders/svg/tvgSvgUtil.h b/src/loaders/svg/tvgSvgUtil.h index 6f94367a..48be4649 100644 --- a/src/loaders/svg/tvgSvgUtil.h +++ b/src/loaders/svg/tvgSvgUtil.h @@ -30,4 +30,6 @@ float svgUtilStrtof(const char *nPtr, char **endPtr); string svgUtilURLDecode(const char *src); string svgUtilBase64Decode(const char *src); +char* svgUtilStrndup(const char* str, size_t n); + #endif //_TVG_SVG_UTIL_H_ diff --git a/src/loaders/svg/tvgXmlParser.cpp b/src/loaders/svg/tvgXmlParser.cpp index 77467e07..faacfcd2 100644 --- a/src/loaders/svg/tvgXmlParser.cpp +++ b/src/loaders/svg/tvgXmlParser.cpp @@ -33,6 +33,7 @@ #endif #include "tvgXmlParser.h" +#include "tvgSvgUtil.h" /************************************************************************/ /* Internal Class Implementation */ @@ -238,14 +239,6 @@ static SimpleXMLType _getXMLType(const char* itr, const char* itrEnd, size_t &to } -static char* _strndup(const char* src, unsigned len) -{ - auto ret = (char*)malloc(len + 1); - if (!ret) return nullptr; - ret[len] = '\0'; - return (char*)memcpy(ret, src, len); -} - /************************************************************************/ /* External Class Implementation */ /************************************************************************/ @@ -564,10 +557,10 @@ const char* simpleXmlParseCSSAttribute(const char* buf, unsigned bufLength, char } if (p == itr) *tag = strdup("all"); - else *tag = _strndup(itr, p - itr); + else *tag = svgUtilStrndup(itr, p - itr); if (p == itrEnd) *name = nullptr; - else *name = _strndup(p + 1, itrEnd - p - 1); + else *name = svgUtilStrndup(p + 1, itrEnd - p - 1); return (nextElement ? nextElement + 1 : nullptr); }