diff options
Diffstat (limited to 'thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp')
-rw-r--r-- | thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp index 763a357f99..7940188ade 100644 --- a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp +++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp @@ -39,29 +39,32 @@ static uint8_t _hexCharToDec(const char c) /* External Class Implementation */ /************************************************************************/ -string svgUtilURLDecode(const char *src) +size_t svgUtilURLDecode(const char *src, char** dst) { - if (!src) return nullptr; + if (!src) return 0; auto length = strlen(src); - if (length == 0) return nullptr; + if (length == 0) return 0; - string decoded; - decoded.reserve(length); + char* decoded = (char*)malloc(sizeof(char) * length + 1); + decoded[length] = '\0'; char a, b; + int idx =0; while (*src) { if (*src == '%' && ((a = src[1]) && (b = src[2])) && (isxdigit(a) && isxdigit(b))) { - decoded += (_hexCharToDec(a) << 4) + _hexCharToDec(b); + decoded[idx++] = (_hexCharToDec(a) << 4) + _hexCharToDec(b); src+=3; } else if (*src == '+') { - decoded += ' '; + decoded[idx++] = ' '; src++; } else { - decoded += *src++; + decoded[idx++] = *src++; } } - return decoded; + + *dst = decoded; + return length + 1; } |