summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-08-16 13:46:32 +0000
committerLennart Poettering <lennart@poettering.net>2007-08-16 13:46:32 +0000
commit03b0b1db7b9d20d3b0b563becda07c3ef93b85de (patch)
tree223bd297b61905099e8366fceaaf905385b74a02
parent81cdb3798c146a577f5b362367137cc93610cba4 (diff)
add pa_truncate_utf8() function for truncating a string and guaranteeing it stays valid UTF8 afterwards
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1673 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r--src/pulsecore/core-util.c18
-rw-r--r--src/pulsecore/core-util.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 165fcf3d..9d846c6d 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -78,6 +78,7 @@
#include <pulse/xmalloc.h>
#include <pulse/util.h>
+#include <pulse/utf8.h>
#include <pulsecore/core-error.h>
#include <pulsecore/winsock.h>
@@ -1223,3 +1224,20 @@ int pa_snprintf(char *str, size_t size, const char *format, ...) {
return ret;
}
+
+/* Truncate the specified string, but guarantee that the string
+ * returned still validates as UTF8 */
+char *pa_truncate_utf8(char *c, size_t l) {
+ pa_assert(c);
+ pa_assert(pa_utf8_valid(c));
+
+ if (strlen(c) <= l)
+ return c;
+
+ c[l] = 0;
+
+ while (l > 0 && !pa_utf8_valid(c))
+ c[--l] = 0;
+
+ return c;
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index a593317d..88ed23fd 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -94,4 +94,6 @@ int pa_atou(const char *s, uint32_t *ret_u);
int pa_snprintf(char *str, size_t size, const char *format, ...);
+char *pa_truncate_utf8(char *c, size_t l);
+
#endif