+
+int utf8_check(unsigned c)
+{
+ if (sizeof(c) >= 4)
+ {
+ size_t r;
+ char src[4];
+ char dst[4];
+ char utf8buf[6];
+ char *inbuf = src;
+ size_t inbytesleft = 4;
+ char *outbuf = utf8buf;
+ size_t outbytesleft = sizeof(utf8buf);
+ int i;
+ yaz_iconv_t cd = yaz_iconv_open("UTF-8", "UCS4LE");
+ if (!cd)
+ return 0;
+ for (i = 0; i<4; i++)
+ src[i] = c >> (i*8);
+
+ r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+ yaz_iconv_close(cd);
+
+ if (r == (size_t)(-1))
+ return 0;
+
+ cd = yaz_iconv_open("UCS4LE", "UTF-8");
+ if (!cd)
+ return 0;
+ inbytesleft = sizeof(utf8buf) - outbytesleft;
+ inbuf = utf8buf;
+
+ outbuf = dst;
+ outbytesleft = 4;
+
+ r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+ if (r == (size_t)(-1))
+ return 0;
+
+ yaz_iconv_close(cd);
+
+ if (memcmp(src, dst, 4))
+ return 0;
+ }
+ return 1;
+}