]> code.delx.au - pulseaudio/blobdiff - src/pulse/utf8.c
volume: when passing NULL as channel map to pa_cvolume_scale_mask() handle this the...
[pulseaudio] / src / pulse / utf8.c
index 119be5425d3669a9e2b46c3e09871c2b6c5144be..6b58bde34fe5112906eadf623211d50686b9ea62 100644 (file)
 
 #define FILTER_CHAR '_'
 
-static inline int is_unicode_valid(uint32_t ch) {
+static inline pa_bool_t is_unicode_valid(uint32_t ch) {
 
     if (ch >= 0x110000) /* End of unicode space */
-        return 0;
+        return FALSE;
     if ((ch & 0xFFFFF800) == 0xD800) /* Reserved area for UTF-16 */
-        return 0;
+        return FALSE;
     if ((ch >= 0xFDD0) && (ch <= 0xFDEF)) /* Reserved */
-        return 0;
+        return FALSE;
     if ((ch & 0xFFFE) == 0xFFFE) /* BOM (Byte Order Mark) */
-        return 0;
+        return FALSE;
 
-    return 1;
+    return TRUE;
 }
 
-static inline int is_continuation_char(uint8_t ch) {
+static inline pa_bool_t is_continuation_char(uint8_t ch) {
     if ((ch & 0xc0) != 0x80) /* 10xxxxxx */
-        return 0;
-    return 1;
+        return FALSE;
+    return TRUE;
 }
 
 static inline void merge_continuation_char(uint32_t *u_ch, uint8_t ch) {
@@ -109,17 +109,17 @@ static char* utf8_validate(const char *str, char *output) {
             if ((*p & 0xe0) == 0xc0) { /* 110xxxxx two-char seq. */
                 size = 2;
                 min = 128;
-                val = *p & 0x1e;
+                val = (uint32_t) (*p & 0x1e);
                 goto ONE_REMAINING;
             } else if ((*p & 0xf0) == 0xe0) { /* 1110xxxx three-char seq.*/
                 size = 3;
                 min = (1 << 11);
-                val = *p & 0x0f;
+                val = (uint32_t) (*p & 0x0f);
                 goto TWO_REMAINING;
             } else if ((*p & 0xf8) == 0xf0) { /* 11110xxx four-char seq */
                 size = 4;
                 min = (1 << 16);
-                val = *p & 0x07;
+                val = (uint32_t) (*p & 0x07);
             } else {
                 size = 1;
                 goto error;
@@ -149,7 +149,7 @@ ONE_REMAINING:
                 goto error;
 
             if (o) {
-                memcpy(o, last, size);
+                memcpy(o, last, (size_t) size);
                 o += size - 1;
             }
 
@@ -189,7 +189,7 @@ char* pa_utf8_filter (const char *str) {
     char *new_str;
 
     pa_assert(str);
-    new_str = pa_xnew(char, strlen(str) + 1);
+    new_str = pa_xmalloc(strlen(str) + 1);
     return utf8_validate(str, new_str);
 }
 
@@ -212,7 +212,7 @@ static char* iconv_simple(const char *str, const char *to, const char *from) {
         return NULL;
 
     inlen = len = strlen(str) + 1;
-    new_str = pa_xnew(char, len);
+    new_str = pa_xmalloc(len);
 
     for (;;) {
         inbuf = (ICONV_CONST char*) str; /* Brain dead prototype for iconv() */
@@ -263,3 +263,29 @@ char* pa_locale_to_utf8 (const char *str) {
 }
 
 #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;
+}