Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
152
Src/devices/strings.cpp
Normal file
152
Src/devices/strings.cpp
Normal file
|
@ -0,0 +1,152 @@
|
|||
#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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue