From 2ab143075b3734c1fe83b840ff4b0a7681113616 Mon Sep 17 00:00:00 2001 From: Tylo Date: Mon, 18 May 2020 16:36:29 +0200 Subject: Added cstring_printf(s, fmt...) and simlilar constructor cstring_makeFmt() and renamed *copy to *assignS --- _config.yml | 1 - stc/cstring.h | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) delete mode 100644 _config.yml diff --git a/_config.yml b/_config.yml deleted file mode 100644 index c50ff38d..00000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-merlot \ No newline at end of file diff --git a/stc/cstring.h b/stc/cstring.h index 76fa0031..ba9b622e 100644 --- a/stc/cstring.h +++ b/stc/cstring.h @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include "cdefs.h" @@ -84,7 +86,7 @@ cstring_makeN(const char* str, size_t len) { CString cs = cstring_init; if (len) { cstring_reserve(&cs, len); - memcpy(cs.str, str, len); + strncpy(cs.str, str, len); cs.str[ _cstring_size(cs) = len ] = '\0'; } return cs; @@ -96,7 +98,7 @@ cstring_make(const char* str) { } static inline CString -cstring_clone(CString cs) { +cstring_makeCopy(CString cs) { return cstring_makeN(cs.str, cstring_size(cs)); } @@ -128,9 +130,8 @@ static inline CString* cstring_assign(CString* self, const char* str) { return cstring_assignN(self, str, strlen(str)); } - static inline CString* -cstring_copy(CString* self, CString cs2) { +cstring_assignS(CString* self, CString cs2) { return cstring_assignN(self, cs2.str, cstring_size(cs2)); } @@ -156,6 +157,31 @@ cstring_appendS(CString* self, CString cs2) { return cstring_appendN(self, cs2.str, cstring_size(cs2)); } +static inline CString* +cstring_printf(CString* self, const char* fmt, ...) { + size_t len = 0; + va_list args; + va_start(args, fmt); + len = vsnprintf(NULL, len, fmt, args); + cstring_reserve(self, len); + vsprintf(self->str, fmt, args); + _cstring_size(*self) = len; + va_end(args); + return self; +} +static inline CString +cstring_makeFmt(const char* fmt, ...) { + CString tmp = cstring_init; + size_t len = 0; + va_list args; + va_start(args, fmt); + len = vsnprintf(NULL, len, fmt, args); + cstring_reserve(&tmp, len); + vsprintf(tmp.str, fmt, args); + _cstring_size(tmp) = len; + va_end(args); + return tmp; +} static inline void _cstring_internalMove(CString* self, size_t pos1, size_t pos2) { if (pos1 == pos2) -- cgit v1.2.3