Write terminating null in allocating wcs/mbs conversions

Turns out wcsnrtombs doesn't.
master
Curtis McEnroe 2018-09-02 13:40:05 -04:00
parent 9a63155b2d
commit c58baa84ee
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
1 changed files with 6 additions and 3 deletions

9
pls.c
View File

@ -45,12 +45,13 @@ wchar_t *ambstowcs(const char *src) {
wchar_t *dst = malloc(sizeof(*dst) * (1 + len)); wchar_t *dst = malloc(sizeof(*dst) * (1 + len));
if (!dst) return NULL; if (!dst) return NULL;
len = mbsrtowcs(dst, &src, 1 + len, NULL); len = mbsrtowcs(dst, &src, len, NULL);
if (len == (size_t)-1) { if (len == (size_t)-1) {
free(dst); free(dst);
return NULL; return NULL;
} }
dst[len] = L'\0';
return dst; return dst;
} }
@ -61,12 +62,13 @@ char *awcstombs(const wchar_t *src) {
char *dst = malloc(sizeof(*dst) * (1 + len)); char *dst = malloc(sizeof(*dst) * (1 + len));
if (!dst) return NULL; if (!dst) return NULL;
len = wcsrtombs(dst, &src, 1 + len, NULL); len = wcsrtombs(dst, &src, len, NULL);
if (len == (size_t)-1) { if (len == (size_t)-1) {
free(dst); free(dst);
return NULL; return NULL;
} }
dst[len] = '\0';
return dst; return dst;
} }
@ -77,12 +79,13 @@ char *awcsntombs(const wchar_t *src, size_t nwc) {
char *dst = malloc(sizeof(*dst) * (1 + len)); char *dst = malloc(sizeof(*dst) * (1 + len));
if (!dst) return NULL; if (!dst) return NULL;
len = wcsnrtombs(dst, &src, nwc, 1 + len, NULL); len = wcsnrtombs(dst, &src, nwc, len, NULL);
if (len == (size_t)-1) { if (len == (size_t)-1) {
free(dst); free(dst);
return NULL; return NULL;
} }
dst[len] = '\0';
return dst; return dst;
} }