Consistently use get_string_len() to correct the size calculation of wide string...
[cparser] / string_rep.c
diff --git a/string_rep.c b/string_rep.c
new file mode 100644 (file)
index 0000000..19c59da
--- /dev/null
@@ -0,0 +1,23 @@
+#include "adt/error.h"
+#include "string_rep.h"
+
+static inline size_t wstrlen(const string_t *string)
+{
+       size_t      result = 0;
+       const char *p      = string->begin;
+       const char *end    = p + string->size;
+       while (p < end) {
+               read_utf8_char(&p);
+               ++result;
+       }
+       return result;
+}
+
+size_t get_string_len(string_encoding_t const enc, string_t const *const str)
+{
+       switch (enc) {
+       case STRING_ENCODING_CHAR: return str->size;
+       case STRING_ENCODING_WIDE: return wstrlen(str);
+       }
+       panic("invalid string encoding");
+}