Read UTF8 string lengths correctly when checking closed captions (part of #1446).
[dcpomatic.git] / src / lib / util.cc
index 7472047e87b206003cfd367a3fdfc6ae2e1a2bfc..cd2d2e753b3827c74e6491c49583b2595c97ed7f 100644 (file)
@@ -815,6 +815,25 @@ checked_fread (void* ptr, size_t size, FILE* stream, boost::filesystem::path pat
        }
 }
 
+size_t
+utf8_strlen (string s)
+{
+       size_t const len = s.length ();
+       int N = 0;
+       for (size_t i = 0; i < len; ++i) {
+               unsigned char c = s[i];
+               if ((c & 0xe0) == 0xc0) {
+                       ++i;
+               } else if ((c & 0xf0) == 0xe0) {
+                       i += 2;
+               } else if ((c & 0xf8) == 0xf0) {
+                       i += 3;
+               }
+               ++N;
+       }
+       return N;
+}
+
 #ifdef DCPOMATIC_VARIANT_SWAROOP
 
 /* Make up a key from the machine UUID */