aboutsummaryrefslogtreecommitdiff
path: root/uchars.c
diff options
context:
space:
mode:
Diffstat (limited to 'uchars.c')
-rw-r--r--uchars.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/uchars.c b/uchars.c
new file mode 100644
index 0000000..5f09f60
--- /dev/null
+++ b/uchars.c
@@ -0,0 +1,29 @@
1#include "memory.h"
2#include "uchars.h"
3
4char *ascii(const char16_t *wstr, bool translate_slashes)
5{
6 size_t len = 0;
7 for (const char16_t *wp = wstr; *wp; wp++)
8 len++;
9 char *ret = snewn(len + 1, char);
10 char *p = ret;
11 for (const char16_t *wp = wstr; *wp; wp++)
12 *p++ = (*wp == '\\' && translate_slashes ? '/' :
13 *wp < 0x80 ? *wp :
14 '?');
15 *p = '\0';
16 return ret;
17}
18
19void c16cpy(char16_t *out, uint32_t *outsize, char *s)
20{
21 uint32_t retlen = 0;
22 while (retlen < *outsize) {
23 char16_t c = (out[retlen] = (unsigned char)*s++);
24 if (!c)
25 break;
26 retlen++;
27 }
28 *outsize = retlen;
29}