From c4c680501791b9c1e69429e114bfac2b78d7a203 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Tue, 11 May 2021 10:52:34 +0200 Subject: Removed cstr_append_fmt(): use cstr_assign_fmt(&s, "%s%s", s.str, "appended string") for that. --- docs/cstr_api.md | 5 ++--- stc/ccommon.h | 1 + stc/cstr.h | 26 ++++++++++---------------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/docs/cstr_api.md b/docs/cstr_api.md index 0f481b92..77fbe86c 100644 --- a/docs/cstr_api.md +++ b/docs/cstr_api.md @@ -38,13 +38,12 @@ void cstr_clear(cstr* self); cstr* cstr_assign(cstr* self, const char* str); cstr* cstr_assign_s(cstr* self, cstr s); // cstr_take(self, cstr_clone(s)) -cstr* cstr_assign_n(cstr* self, const char* str, size_t n); +cstr* cstr_assign_n(cstr* self, const char* str, size_t n); // assign n first chars of str cstr* cstr_assign_fmt(cstr* self, const char* fmt, ...); // printf() formatting cstr* cstr_append(cstr* self, const char* str); cstr* cstr_append_s(cstr* self, cstr s); -cstr* cstr_append_n(cstr* self, const char* str, size_t n); // appends n characters -cstr* cstr_append_fmt(cstr* self, const char* fmt, ...); // printf() formatting +cstr* cstr_append_n(cstr* self, const char* str, size_t n); void cstr_insert(cstr* self, size_t pos, const char* str); void cstr_insert_s(cstr* self, size_t pos, cstr s); diff --git a/stc/ccommon.h b/stc/ccommon.h index 5b5f7e59..37458243 100644 --- a/stc/ccommon.h +++ b/stc/ccommon.h @@ -120,6 +120,7 @@ for (type i=start, i##_inc_=step, i##_end_=(stop) - (0 < i##_inc_) \ ; (i <= i##_end_) == (0 < i##_inc_); i += i##_inc_) +#define c_with(start, end) for (int _c_w = (start, 0); !_c_w; end, ++_c_w) #define c_withfile(f, open) for (FILE *f = open; f; fclose(f), f = NULL) #define c_withbuffer(b, type, n) c_withbuffer_x(b, type, n, 256) #define c_withbuffer_x(b, type, n, BYTES) \ diff --git a/stc/cstr.h b/stc/cstr.h index d24e112e..7dc76058 100644 --- a/stc/cstr.h +++ b/stc/cstr.h @@ -220,18 +220,18 @@ cstr_from_n(const char* str, size_t n) { # pragma warning(push) # pragma warning(disable: 4996) #endif -/// + STC_DEF void -cstr_vfmt(cstr* self, size_t pos, const char* fmt, va_list args) { +cstr_vfmt(cstr* self, const char* fmt, va_list args) { va_list args2; va_copy(args2, args); int len = vsnprintf(NULL, (size_t)0, fmt, args); - cstr_reserve(self, pos + len); - vsprintf(self->str + pos, fmt, args2); + cstr_reserve(self, len); + vsprintf(self->str, fmt, args2); va_end(args2); - _cstr_rep(self)->size = pos + len; + _cstr_rep(self)->size = len; } -/// + #if defined(__clang__) # pragma clang diagnostic pop #elif defined(_MSC_VER) @@ -242,24 +242,18 @@ STC_DEF cstr cstr_from_fmt(const char* fmt, ...) { cstr ret = cstr_inits; va_list args; va_start(args, fmt); - cstr_vfmt(&ret, 0, fmt, args); + cstr_vfmt(&ret, fmt, args); va_end(args); return ret; } STC_DEF cstr* cstr_assign_fmt(cstr* self, const char* fmt, ...) { + cstr ret = cstr_inits; va_list args; va_start(args, fmt); - cstr_vfmt(self, 0, fmt, args); - va_end(args); - return self; -} - -STC_DEF cstr* -cstr_append_fmt(cstr* self, const char* fmt, ...) { - va_list args; va_start(args, fmt); - cstr_vfmt(self, cstr_size(*self), fmt, args); + cstr_vfmt(&ret, fmt, args); va_end(args); + cstr_del(self); *self = ret; return self; } -- cgit v1.2.3