summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-05-11 10:52:34 +0200
committerTyge Løvset <[email protected]>2021-05-11 10:52:34 +0200
commitc4c680501791b9c1e69429e114bfac2b78d7a203 (patch)
treed26639ec6230284d959a56e4b919e59aef1adc66
parent1401833dbfc8a08bf94978e98c76904aa82d3878 (diff)
downloadSTC-modified-c4c680501791b9c1e69429e114bfac2b78d7a203.tar.gz
STC-modified-c4c680501791b9c1e69429e114bfac2b78d7a203.zip
Removed cstr_append_fmt(): use cstr_assign_fmt(&s, "%s%s", s.str, "appended string") for that.
-rw-r--r--docs/cstr_api.md5
-rw-r--r--stc/ccommon.h1
-rw-r--r--stc/cstr.h26
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;
}