/*
 * Decode a single UTF-8 character to the platform's local wchar_t.
 */

#include "putty.h"
#include "misc.h"

size_t decode_utf8_to_wchar(BinarySource *src, wchar_t *out,
                            DecodeUTF8Failure *err)
{
    size_t outlen = 0;
    unsigned wc = decode_utf8(src, err);
    if (sizeof(wchar_t) > 2 || wc < 0x10000) {
        out[outlen++] = wc;
    } else {
        unsigned wcoff = wc - 0x10000;
        out[outlen++] = 0xD800 | (0x3FF & (wcoff >> 10));
        out[outlen++] = 0xDC00 | (0x3FF & wcoff);
    }
    return outlen;
}
