123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #include "main.h"
- #include "./strings.h"
- #include <strsafe.h>
- wchar_t *
- String_Malloc(size_t size)
- {
- return (wchar_t *)calloc(size, sizeof(wchar_t));
- }
- 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, 0)))
- return 0;
-
- return (size - remaining);
- }
- char *
- AnsiString_Malloc(size_t size)
- {
- return (char*)calloc(size, sizeof(char));
- }
- 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;
- }
|