utfconv: add functions that use arena_allocator
This commit is contained in:
parent
9293a317cd
commit
1f0533482b
|
@ -12,8 +12,34 @@
|
|||
#include <stdlib.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include "arena_allocator.h"
|
||||
|
||||
#define UTFCONV_ERROR_INVALID_CONVERSION "Input contains invalid byte sequences."
|
||||
|
||||
#define utfconv_fromutf8(A, str) utfconv_fromlutf8(A, str, -1)
|
||||
|
||||
static UNUSED LPWSTR utfconv_fromlutf8(lxl_arena *A, const char *str, int len) {
|
||||
int output_len = MultiByteToWideChar(CP_UTF8, 0, str, len, NULL, 0);
|
||||
if (!output_len) return NULL;
|
||||
LPWSTR output = lxl_arena_malloc(A, sizeof(WCHAR) * output_len);
|
||||
if (!output) return NULL;
|
||||
output_len = MultiByteToWideChar(CP_UTF8, 0, str, len, output, output_len);
|
||||
if (!output_len) return (lxl_arena_free(A, output), NULL);
|
||||
return output;
|
||||
}
|
||||
|
||||
#define utfconv_fromwstr(A, str) utfconv_fromlwstr(A, str, -1)
|
||||
|
||||
static UNUSED const char *utfconv_fromlwstr(lxl_arena *A, LPWSTR str, int len) {
|
||||
int output_len = WideCharToMultiByte(CP_UTF8, 0, str, len, NULL, 0, NULL, NULL);
|
||||
if (!output_len) return NULL;
|
||||
char *output = lxl_arena_malloc(A, sizeof(char) * output_len);
|
||||
if (!output) return NULL;
|
||||
output_len = WideCharToMultiByte(CP_UTF8, 0, str, len, output, output_len, NULL, NULL);
|
||||
if (!output_len) return (lxl_arena_free(A, output), NULL);
|
||||
return (const char *) output;
|
||||
}
|
||||
|
||||
static UNUSED LPWSTR utfconv_utf8towc(const char *str) {
|
||||
LPWSTR output;
|
||||
int len;
|
||||
|
|
Loading…
Reference in New Issue