]> code.delx.au - pulseaudio/blobdiff - src/pulse/utf8.c
format: Trivial reorganisation
[pulseaudio] / src / pulse / utf8.c
index 7671be464cb16b2e058df475ae04abb586f1b40e..773a1f8383f4df998d5d552873aca72723d04f7d 100644 (file)
@@ -120,10 +120,8 @@ static char* utf8_validate(const char *str, char *output) {
                 size = 4;
                 min = (1 << 16);
                 val = (uint32_t) (*p & 0x07);
-            } else {
-                size = 1;
+            } else
                 goto error;
-            }
 
             p++;
             if (!is_continuation_char(*p))
@@ -150,12 +148,9 @@ ONE_REMAINING:
 
             if (o) {
                 memcpy(o, last, (size_t) size);
-                o += size - 1;
+                o += size;
             }
 
-            if (o)
-                o++;
-
             continue;
 
 error:
@@ -254,12 +249,43 @@ char* pa_locale_to_utf8 (const char *str) {
 
 char* pa_utf8_to_locale (const char *str) {
     pa_assert(str);
-    return NULL;
+
+    return pa_ascii_filter(str);
 }
 
 char* pa_locale_to_utf8 (const char *str) {
     pa_assert(str);
+
+    if (pa_utf8_valid(str))
+        return pa_xstrdup(str);
+
     return NULL;
 }
 
 #endif
+
+char *pa_ascii_valid(const char *str) {
+    const char *p;
+    pa_assert(str);
+
+    for (p = str; *p; p++)
+        if ((unsigned char) *p >= 128)
+            return NULL;
+
+    return (char*) str;
+}
+
+char *pa_ascii_filter(const char *str) {
+    char *r, *s, *d;
+    pa_assert(str);
+
+    r = pa_xstrdup(str);
+
+    for (s = r, d = r; *s; s++)
+        if ((unsigned char) *s < 128)
+            *(d++) = *s;
+
+    *d = 0;
+
+    return r;
+}