Updated cgltf.

This commit is contained in:
Бранимир Караџић
2021-09-25 20:00:08 -07:00
parent ca8b00484a
commit 85b370fa37

View File

@@ -779,6 +779,7 @@ cgltf_result cgltf_load_buffers(
cgltf_result cgltf_load_buffer_base64(const cgltf_options* options, cgltf_size size, const char* base64, void** out_data);
void cgltf_decode_string(char* string);
void cgltf_decode_uri(char* uri);
cgltf_result cgltf_validate(cgltf_data* data);
@@ -1265,6 +1266,72 @@ static int cgltf_unhex(char ch)
-1;
}
void cgltf_decode_string(char* string)
{
char* read = strchr(string, '\\');
if (read == NULL)
{
return;
}
char* write = string;
char* last = string;
while (read)
{
// Copy characters since last escaped sequence
cgltf_size written = read - last;
strncpy(write, last, written);
write += written;
// jsmn already checked that all escape sequences are valid
++read;
switch (*read++)
{
case '\"': *write++ = '\"'; break;
case '/': *write++ = '/'; break;
case '\\': *write++ = '\\'; break;
case 'b': *write++ = '\b'; break;
case 'f': *write++ = '\f'; break;
case 'r': *write++ = '\r'; break;
case 'n': *write++ = '\n'; break;
case 't': *write++ = '\t'; break;
case 'u':
{
// UCS-2 codepoint \uXXXX to UTF-8
int character = 0;
for (cgltf_size i = 0; i < 4; ++i)
{
character = (character << 4) + cgltf_unhex(*read++);
}
if (character <= 0x7F)
{
*write++ = character & 0xFF;
}
else if (character <= 0x7FF)
{
*write++ = 0xC0 | ((character >> 6) & 0xFF);
*write++ = 0x80 | (character & 0x3F);
}
else
{
*write++ = 0xE0 | ((character >> 12) & 0xFF);
*write++ = 0x80 | ((character >> 6) & 0x3F);
*write++ = 0x80 | (character & 0x3F);
}
break;
}
default:
break;
}
last = read;
read = strchr(read, '\\');
}
strcpy(write, last);
}
void cgltf_decode_uri(char* uri)
{
char* write = uri;