summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/012/buf.tl6
-rw-r--r--utf8.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/tests/012/buf.tl b/tests/012/buf.tl
index 1c8040d6..8f494264 100644
--- a/tests/012/buf.tl
+++ b/tests/012/buf.tl
@@ -2,3 +2,9 @@
(vtest (uint-buf (make-buf 8 255 16)) (pred (expt 2 64)))
(test (int-buf (make-buf 8 255 16)) -1)
+
+(mtest
+ (str-buf #b'E6BC') "\xDCE6\xDCBC"
+ (buf-str "\xDCE6\xDCBC") #b'E6BC'
+ (str-buf #b'E6') "\xDCE6"
+ (buf-str "\xDCE6") #b'E6')
diff --git a/utf8.c b/utf8.c
index e1e696fc..9ec6aed9 100644
--- a/utf8.c
+++ b/utf8.c
@@ -138,8 +138,18 @@ size_t utf8_from_buf(wchar_t *wdst, const unsigned char *src, size_t nbytes)
}
}
+ if (state != utf8_init) {
+ while (backtrack != src) {
+ if (wdst)
+ *wdst++ = 0xDC00 | *backtrack;
+ nchar++;
+ backtrack++;
+ }
+ }
+
if (wdst)
*wdst++ = 0;
+
return nchar;
}