Testing strings utils.
#include <stdlib.h> #include <assert.h> #include <errno.h> #include <string.h> static inline errno_t wstr_reserve(wchar_t** pptext, size_t* capacity, size_t new_capacity) { assert(pptext && capacity); assert(new_capacity > 0); if (new_capacity < *capacity) { return 0; } errno_t r = ENOMEM; wchar_t* ptemp = 0; if (*pptext == NULL) { ptemp = (wchar_t*)malloc(sizeof(wchar_t) * (new_capacity)); if (ptemp) { ptemp[0] = '\0'; } } else { ptemp = (wchar_t*)realloc(*pptext, sizeof(wchar_t) * (new_capacity)); } if (ptemp) { *pptext = ptemp; *capacity = new_capacity; r = 0; } return r; } errno_t wstr_append(wchar_t **pptext, size_t* capacity, size_t* size, const wchar_t* psource) { errno_t r = 0; size_t s = wcslen(psource); r = wstr_reserve(pptext, capacity, *size + s + 1); if (r == 0) { r = wcscpy_s(*pptext + *size, *capacity - *size, psource); if (r == 0) { *size += s; } } return r; } errno_t wstr_set(wchar_t **pptext, size_t* capacity, size_t* size, const wchar_t* psource) { errno_t r = 0; size_t s = wcslen(psource); r = wstr_reserve(pptext, capacity, s + 1); if (r == 0) { r = wcscpy_s(*pptext, *capacity, psource); if (r == 0) { *size = s; } } return r; } void wstr_clear(wchar_t **pptext, size_t* size) { (*pptext)[0] = 0; *size = 0; } void wstr_destroy(wchar_t **pptext, size_t* capacity, size_t* size) { free(*pptext); *capacity = 0; *size = 0; } int main(int argc, char* argv[]) { wchar_t *ptext = 0; size_t capacity = 0; size_t size = 0; wstr_append(&ptext, &capacity, &size, L"teste"); wstr_append(&ptext, &capacity, &size, L"2"); wstr_set(&ptext, &capacity, &size, L"b"); wstr_clear(&ptext, &size); wstr_destroy(&ptext, &capacity, &size); return 0; }