diff options
author | June McEnroe <june@causal.agency> | 2018-09-02 13:40:05 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-09-02 13:45:00 -0400 |
commit | c58baa84eee3b0d80b1ec62c57ba616da99e3125 (patch) | |
tree | a4d4807a2184526570a55ab6245957c823c536cd /pls.c | |
parent | Treat all direct messages as pings (diff) | |
download | catgirl-c58baa84eee3b0d80b1ec62c57ba616da99e3125.tar.gz catgirl-c58baa84eee3b0d80b1ec62c57ba616da99e3125.zip |
Write terminating null in allocating wcs/mbs conversions
Turns out wcsnrtombs doesn't.
Diffstat (limited to '')
-rw-r--r-- | pls.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/pls.c b/pls.c index 9f6cb69..d91fc97 100644 --- a/pls.c +++ b/pls.c @@ -45,12 +45,13 @@ wchar_t *ambstowcs(const char *src) { wchar_t *dst = malloc(sizeof(*dst) * (1 + len)); if (!dst) return NULL; - len = mbsrtowcs(dst, &src, 1 + len, NULL); + len = mbsrtowcs(dst, &src, len, NULL); if (len == (size_t)-1) { free(dst); return NULL; } + dst[len] = L'\0'; return dst; } @@ -61,12 +62,13 @@ char *awcstombs(const wchar_t *src) { char *dst = malloc(sizeof(*dst) * (1 + len)); if (!dst) return NULL; - len = wcsrtombs(dst, &src, 1 + len, NULL); + len = wcsrtombs(dst, &src, len, NULL); if (len == (size_t)-1) { free(dst); return NULL; } + dst[len] = '\0'; return dst; } @@ -77,12 +79,13 @@ char *awcsntombs(const wchar_t *src, size_t nwc) { char *dst = malloc(sizeof(*dst) * (1 + len)); if (!dst) return NULL; - len = wcsnrtombs(dst, &src, nwc, 1 + len, NULL); + len = wcsnrtombs(dst, &src, nwc, len, NULL); if (len == (size_t)-1) { free(dst); return NULL; } + dst[len] = '\0'; return dst; } |