diff options
Diffstat (limited to 'ustring.c')
| -rw-r--r-- | ustring.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -33,6 +33,21 @@ char *ustrtoa(wchar_t *s, char *outbuf, int size) { return outbuf; } +wchar_t *ustrfroma(char *s, wchar_t *outbuf, int size) { + wchar_t *p; + if (!s) { + *outbuf = L'\0'; + return outbuf; + } + for (p = outbuf; *s && p < outbuf+size; p++,s++) + *p = *s; + if (p < outbuf+size) + *p = '\0'; + else + outbuf[size-1] = '\0'; + return outbuf; +} + char *utoa_dup(wchar_t *s) { int len; char *buf = NULL; @@ -48,6 +63,21 @@ char *utoa_dup(wchar_t *s) { return buf; } +wchar_t *ufroma_dup(char *s) { + int len; + wchar_t *buf = NULL; + + len = strlen(s) + 1; + do { + buf = resize(buf, len); + ustrfroma(s, buf, len); + len = (3 * len) / 2 + 1; /* this guarantees a strict increase */ + } while (ustrlen(buf) >= len-1); + + buf = resize(buf, ustrlen(buf)+1); + return buf; +} + int ustrlen(wchar_t *s) { int len = 0; while (*s++) len++; |