From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Plugins/Library/ml_devices/strings.cpp | 195 +++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 Src/Plugins/Library/ml_devices/strings.cpp (limited to 'Src/Plugins/Library/ml_devices/strings.cpp') diff --git a/Src/Plugins/Library/ml_devices/strings.cpp b/Src/Plugins/Library/ml_devices/strings.cpp new file mode 100644 index 00000000..bfbef052 --- /dev/null +++ b/Src/Plugins/Library/ml_devices/strings.cpp @@ -0,0 +1,195 @@ +#include "main.h" +#include "./strings.h" +#include + + +wchar_t * +String_Malloc(size_t size) +{ + return (wchar_t *)malloc(sizeof(wchar_t) * size); +} + +wchar_t * +String_ReAlloc(wchar_t *string, size_t size) +{ + return (wchar_t *)realloc(string, sizeof(wchar_t) * size); +} + +void +String_Free(wchar_t *string) +{ + if (NULL != string) + free(string); +} + +wchar_t * +String_Duplicate(const wchar_t *string) +{ + int length; + wchar_t *copy; + + if (NULL == string) + return NULL; + + length = lstrlenW(string) + 1; + + copy = String_Malloc(length); + if (NULL != copy) + CopyMemory(copy, string, sizeof(wchar_t) * length); + + return copy; +} + + +char * +String_ToAnsi(unsigned int codePage, unsigned long flags, const wchar_t *string, + int stringLength, const char *defaultChar, BOOL *usedDefaultChar) +{ + char *buffer; + int bufferSize; + + if (stringLength < 0) + stringLength = lstrlen(string); + + bufferSize = WideCharToMultiByte(codePage, flags, string, stringLength, + NULL, 0, defaultChar, usedDefaultChar); + if (0 == bufferSize) + return NULL; + + buffer = AnsiString_Malloc(bufferSize + 1); + if (NULL == buffer) + return NULL; + + bufferSize = WideCharToMultiByte(codePage, flags, string, stringLength, + buffer, bufferSize, defaultChar, usedDefaultChar); + if (0 == bufferSize) + { + AnsiString_Free(buffer); + return NULL; + } + buffer[bufferSize] = '\0'; + return buffer; +} + +size_t +String_CopyTo(wchar_t *destination, const wchar_t *source, size_t size) +{ + size_t remaining; + if (FAILED(StringCchCopyExW(destination, size, source, NULL, &remaining, STRSAFE_IGNORE_NULLS))) + return 0; + + return (size - remaining); +} + + +char * +AnsiString_Malloc(size_t size) +{ + return (char*)malloc(sizeof(char) * size); +} + +char * +AnsiString_ReAlloc(char *string, size_t size) +{ + return (char*)realloc(string, sizeof(char) * size); +} + +void +AnsiString_Free(char *string) +{ + if (NULL != string) + free(string); +} + +char * +AnsiString_Duplicate(const char *string) +{ + char *copy; + INT length; + + if (NULL == string) + return NULL; + + length = lstrlenA(string) + 1; + + copy = AnsiString_Malloc(length); + if (NULL != copy) + CopyMemory(copy, string, sizeof(char) * length); + + return copy; +} + + +wchar_t * +AnsiString_ToUnicode(unsigned int codePage, unsigned long flags, const char* string, INT stringLength) +{ + wchar_t *buffer; + int buffferSize; + + if (NULL == string) + return NULL; + + buffferSize = MultiByteToWideChar(codePage, flags, string, stringLength, NULL, 0); + if (0 == buffferSize) + return NULL; + + if (stringLength > 0) + buffferSize++; + + buffer = String_Malloc(buffferSize); + if (NULL == buffer) + return NULL; + + if (0 == MultiByteToWideChar(codePage, flags, string, stringLength, buffer, buffferSize)) + { + String_Free(buffer); + return NULL; + } + + if (stringLength > 0) + buffer[buffferSize - 1] = L'\0'; + + return buffer; +} + +wchar_t* +ResourceString_Duplicate(const wchar_t *source) +{ + return (FALSE != IS_INTRESOURCE(source)) ? + (LPWSTR)source : + String_Duplicate(source); +} + +void +ResourceString_Free(wchar_t *string) +{ + if (FALSE == IS_INTRESOURCE(string)) + String_Free(string); +} + +size_t +ResourceString_CopyTo(wchar_t *destination, const wchar_t *source, size_t size) +{ + if (NULL == destination) + return 0; + + if (NULL == source) + { + destination[0] = L'\0'; + return 0; + } + + if (FALSE != IS_INTRESOURCE(source)) + { + if (NULL == WASABI_API_LNG) + { + destination[0] = L'\0'; + return 0; + } + + WASABI_API_LNGSTRINGW_BUF((INT)(INT_PTR)source, destination, size); + return lstrlenW(destination); + } + + return String_CopyTo(destination, source, size); +} -- cgit