summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/htscharset.c14
-rw-r--r--src/htscharset.h7
2 files changed, 21 insertions, 0 deletions
diff --git a/src/htscharset.c b/src/htscharset.c
index 1de7c61..932c01e 100644
--- a/src/htscharset.c
+++ b/src/htscharset.c
@@ -1156,6 +1156,20 @@ char *hts_convertUCS4StringToUTF8(const hts_UCS4 *s, size_t nChars) {
return dest;
}
+size_t hts_writeUTF8(hts_UCS4 uc, char *dest, size_t size) {
+ size_t offs = 0;
+#define EM(C) do { \
+ if (offs + 1 < size) { \
+ dest[offs++] = C; \
+ } else { \
+ return 0; \
+ } \
+} while(0)
+ EMIT_UNICODE(uc, EM);
+#undef EM
+ return offs;
+}
+
size_t hts_stringLengthUCS4(const hts_UCS4 *s) {
size_t i;
for(i = 0 ; s[i] != 0 ; i++) ;
diff --git a/src/htscharset.h b/src/htscharset.h
index 04bb6c1..bb7f3da 100644
--- a/src/htscharset.h
+++ b/src/htscharset.h
@@ -147,6 +147,13 @@ extern char *hts_convertUCS2StringToUTF8(LPWSTR woutput, int wsize);
**/
extern char *hts_convertStringSystemToUTF8(const char *s, size_t size);
+/**
+ * Write the Unicode character 'uc' in 'dest' of maximum size 'size'.
+ * Return the number of bytes written, or 0 upon error.
+ * Note: does not \0-terminate the destination buffer.
+ **/
+extern size_t hts_writeUTF8(hts_UCS4 uc, char *dest, size_t size);
+
#endif
#endif