libnx/nx/source/runtime/util/utf/utf32_to_utf16.c
2018-01-11 21:38:12 +01:00

37 lines
598 B
C

#include "switch/types.h"
#include "switch/runtime/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;
}