aboutsummaryrefslogtreecommitdiff
path: root/uchars.c
blob: 7e7967fb1cbf1c35d32008c36458ddc303b4aaa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "memory.h"
#include "uchars.h"

char *ascii(const char16_t *wstr, bool translate_slashes)
{
    size_t len = 0;
    for (const char16_t *wp = wstr; *wp; wp++)
        len++;
    char *ret = snewn(len + 1, char);
    char *p = ret;
    for (const char16_t *wp = wstr; *wp; wp++)
        *p++ = (*wp == '\\' && translate_slashes ? '/' :
                *wp < 0x80 ? *wp :
                '?');
    *p = '\0';
    return ret;
}

void c16cpy(char16_t *out, uint32_t *outsize, const char *s)
{
    uint32_t retlen = 0;
    while (retlen < *outsize) {
        char16_t c = (out[retlen] = (unsigned char)*s++);
        if (!c)
            break;
        retlen++;
    }
    *outsize = retlen;
}