diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-09-22 16:32:41 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-10-05 16:54:05 +0200 |
| commit | bc5663168d8fd42704d6a55af5a8c9992c75f6af (patch) | |
| tree | bfe642efc4be3d796d6f45fa0c8e107cfdda7026 /text.c | |
| parent | a05c75426f5fecd38007b2186b55153bb30a7f93 (diff) | |
| download | vis-bc5663168d8fd42704d6a55af5a8c9992c75f6af.tar.gz vis-bc5663168d8fd42704d6a55af5a8c9992c75f6af.tar.xz | |
text: add text_{v,}printf function
Convenient way to insert formated data into a Text.
Diffstat (limited to 'text.c')
| -rw-r--r-- | text.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -634,6 +634,24 @@ bool text_insert(Text *txt, size_t pos, const char *data, size_t len) { return true; } +bool text_printf(Text *txt, size_t pos, const char *format, ...) { + va_list ap; + va_start(ap, format); + bool ret = text_vprintf(txt, pos, format, ap); + va_end(ap); + return ret; +} + +bool text_vprintf(Text *txt, size_t pos, const char *format, va_list ap) { + int len = vsnprintf(NULL, 0, format, ap); + if (len == -1) + return false; + char *buf = malloc(len+1); + bool ret = buf && (vsnprintf(buf, len+1, format, ap) == len) && text_insert(txt, pos, buf, len); + free(buf); + return ret; +} + static size_t action_undo(Text *txt, Action *a) { size_t pos = EPOS; for (Change *c = a->change; c; c = c->next) { |
