mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
37 lines
590 B
C
37 lines
590 B
C
#include "switch/types.h"
|
|
#include "switch/util/utf.h"
|
|
|
|
ssize_t
|
|
utf32_to_utf16(uint16_t *out,
|
|
const uint32_t *in,
|
|
size_t len)
|
|
{
|
|
ssize_t rc = 0;
|
|
ssize_t units;
|
|
uint16_t encoded[2];
|
|
|
|
while(*in > 0)
|
|
{
|
|
units = encode_utf16(encoded, *in++);
|
|
if(units == -1)
|
|
return -1;
|
|
|
|
if(out != NULL)
|
|
{
|
|
if(rc + units <= len)
|
|
{
|
|
*out++ = encoded[0];
|
|
if(units > 1)
|
|
*out++ = encoded[1];
|
|
}
|
|
}
|
|
|
|
if(SSIZE_MAX - units >= rc)
|
|
rc += units;
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
return rc;
|
|
}
|