SgObject Sg_MakeNativeConsoleTranscoder() { static SgObject trans = NULL; if (trans == NULL) { trans = Sg_MakeTranscoder(Sg_MakeUtf16Codec(UTF_16LE), Sg_NativeEol(), SG_REPLACE_ERROR); } return trans; }
/* from mosh */ static const wchar_t* utf32ToUtf16(SgString *path) { int size = SG_STRING_SIZE(path); SgCodec *codec = Sg_MakeUtf16Codec(UTF_16LE); SgTranscoder *tcoder = Sg_MakeTranscoder(codec, LF, SG_REPLACE_ERROR); SgPort *out, *tout; SgBytePort bp; SgTranscodedPort tp; out = Sg_InitByteArrayOutputPort(&bp, sizeof(wchar_t) * (size + 1)); tout = Sg_InitTranscodedPort(&tp, out, tcoder, SG_OUTPUT_PORT); Sg_TranscoderWrite(tcoder, tout, SG_STRING_VALUE(path), SG_STRING_SIZE(path)); Sg_TranscoderPutc(tcoder, tout, '\0'); return (const wchar_t*)Sg_GetByteArrayFromBinaryPort(&bp); }