C言語でShiftJISからUTF-8に変換するコードをライブラリは使用しないで書いて下さい。

以下はC言語でShiftJISからUTF-8に変換する簡単なコードです。このコードでは、ShiftJISの1バイト目が0x81以上0x9F以下または0xE0以上0xEF以下の場合には2バイト文字、それ以外の場合には1バイト文字として扱います。

#include <stdio.h>

void sjis_to_utf8(char *sjis, char *utf8) {
unsigned char c1, c2;
while (*sjis != '\0') {
c1 = *(unsigned char *)sjis++;
if (c1 <= 0x7F) {
*utf8++ = c1;
} else {
c2 = *(unsigned char *)sjis++;
if ((0x81 <= c1 && c1 <= 0x9F) || (0xE0 <= c1 && c1 <= 0xEF)) {
*utf8++ = ((c1 << 8) | c2) + 0x3C00;
} else {
*utf8++ = c1;
sjis--;
}
}
}
*utf8 = '\0';
}

int main() {
char sjis[] = "こんにちは、世界!";
char utf8[100];
sjis_to_utf8(sjis, utf8);
printf("%s\n", utf8);
return 0;
}