mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-07 22:38:41 +00:00
changed string conversion routines to return null on null input
In os_process_launch on windows, linker relies on directory string conversion to return null so CreateProcessW can set work directory itself.
This commit is contained in:
+79
-51
@@ -1504,70 +1504,98 @@ utf8_from_utf32_single(U8 *buffer, U32 character){
|
|||||||
//~ rjf: Unicode String Conversions
|
//~ rjf: Unicode String Conversions
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
str8_from_16(Arena *arena, String16 in){
|
str8_from_16(Arena *arena, String16 in)
|
||||||
U64 cap = in.size*3;
|
{
|
||||||
U8 *str = push_array_no_zero(arena, U8, cap + 1);
|
String8 result = str8_zero();
|
||||||
U16 *ptr = in.str;
|
if(in.size)
|
||||||
U16 *opl = ptr + in.size;
|
{
|
||||||
U64 size = 0;
|
U64 cap = in.size*3;
|
||||||
UnicodeDecode consume;
|
U8 *str = push_array_no_zero(arena, U8, cap + 1);
|
||||||
for (;ptr < opl; ptr += consume.inc){
|
U16 *ptr = in.str;
|
||||||
consume = utf16_decode(ptr, opl - ptr);
|
U16 *opl = ptr + in.size;
|
||||||
size += utf8_encode(str + size, consume.codepoint);
|
U64 size = 0;
|
||||||
|
UnicodeDecode consume;
|
||||||
|
for(;ptr < opl; ptr += consume.inc)
|
||||||
|
{
|
||||||
|
consume = utf16_decode(ptr, opl - ptr);
|
||||||
|
size += utf8_encode(str + size, consume.codepoint);
|
||||||
|
}
|
||||||
|
str[size] = 0;
|
||||||
|
arena_pop(arena, (cap - size));
|
||||||
|
result = str8(str, size);
|
||||||
}
|
}
|
||||||
str[size] = 0;
|
return result;
|
||||||
arena_pop(arena, (cap - size));
|
|
||||||
return(str8(str, size));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String16
|
internal String16
|
||||||
str16_from_8(Arena *arena, String8 in){
|
str16_from_8(Arena *arena, String8 in)
|
||||||
U64 cap = in.size*2;
|
{
|
||||||
U16 *str = push_array_no_zero(arena, U16, cap + 1);
|
String16 result = str16_zero();
|
||||||
U8 *ptr = in.str;
|
if(in.size)
|
||||||
U8 *opl = ptr + in.size;
|
{
|
||||||
U64 size = 0;
|
U64 cap = in.size*2;
|
||||||
UnicodeDecode consume;
|
U16 *str = push_array_no_zero(arena, U16, cap + 1);
|
||||||
for (;ptr < opl; ptr += consume.inc){
|
U8 *ptr = in.str;
|
||||||
consume = utf8_decode(ptr, opl - ptr);
|
U8 *opl = ptr + in.size;
|
||||||
size += utf16_encode(str + size, consume.codepoint);
|
U64 size = 0;
|
||||||
|
UnicodeDecode consume;
|
||||||
|
for(;ptr < opl; ptr += consume.inc)
|
||||||
|
{
|
||||||
|
consume = utf8_decode(ptr, opl - ptr);
|
||||||
|
size += utf16_encode(str + size, consume.codepoint);
|
||||||
|
}
|
||||||
|
str[size] = 0;
|
||||||
|
arena_pop(arena, (cap - size)*2);
|
||||||
|
result = str16(str, size);
|
||||||
}
|
}
|
||||||
str[size] = 0;
|
return result;
|
||||||
arena_pop(arena, (cap - size)*2);
|
|
||||||
return(str16(str, size));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String8
|
internal String8
|
||||||
str8_from_32(Arena *arena, String32 in){
|
str8_from_32(Arena *arena, String32 in)
|
||||||
U64 cap = in.size*4;
|
{
|
||||||
U8 *str = push_array_no_zero(arena, U8, cap + 1);
|
String8 result = str8_zero();
|
||||||
U32 *ptr = in.str;
|
if(in.size)
|
||||||
U32 *opl = ptr + in.size;
|
{
|
||||||
U64 size = 0;
|
U64 cap = in.size*4;
|
||||||
for (;ptr < opl; ptr += 1){
|
U8 *str = push_array_no_zero(arena, U8, cap + 1);
|
||||||
size += utf8_encode(str + size, *ptr);
|
U32 *ptr = in.str;
|
||||||
|
U32 *opl = ptr + in.size;
|
||||||
|
U64 size = 0;
|
||||||
|
for(;ptr < opl; ptr += 1)
|
||||||
|
{
|
||||||
|
size += utf8_encode(str + size, *ptr);
|
||||||
|
}
|
||||||
|
str[size] = 0;
|
||||||
|
arena_pop(arena, (cap - size));
|
||||||
|
result = str8(str, size);
|
||||||
}
|
}
|
||||||
str[size] = 0;
|
return result;
|
||||||
arena_pop(arena, (cap - size));
|
|
||||||
return(str8(str, size));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal String32
|
internal String32
|
||||||
str32_from_8(Arena *arena, String8 in){
|
str32_from_8(Arena *arena, String8 in)
|
||||||
U64 cap = in.size;
|
{
|
||||||
U32 *str = push_array_no_zero(arena, U32, cap + 1);
|
String32 result = str32_zero();
|
||||||
U8 *ptr = in.str;
|
if(in.size)
|
||||||
U8 *opl = ptr + in.size;
|
{
|
||||||
U64 size = 0;
|
U64 cap = in.size;
|
||||||
UnicodeDecode consume;
|
U32 *str = push_array_no_zero(arena, U32, cap + 1);
|
||||||
for (;ptr < opl; ptr += consume.inc){
|
U8 *ptr = in.str;
|
||||||
consume = utf8_decode(ptr, opl - ptr);
|
U8 *opl = ptr + in.size;
|
||||||
str[size] = consume.codepoint;
|
U64 size = 0;
|
||||||
size += 1;
|
UnicodeDecode consume;
|
||||||
|
for(;ptr < opl; ptr += consume.inc)
|
||||||
|
{
|
||||||
|
consume = utf8_decode(ptr, opl - ptr);
|
||||||
|
str[size] = consume.codepoint;
|
||||||
|
size += 1;
|
||||||
|
}
|
||||||
|
str[size] = 0;
|
||||||
|
arena_pop(arena, (cap - size)*4);
|
||||||
|
result = str32(str, size);
|
||||||
}
|
}
|
||||||
str[size] = 0;
|
return result;
|
||||||
arena_pop(arena, (cap - size)*4);
|
|
||||||
return(str32(str, size));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|||||||
Reference in New Issue
Block a user