path: root/common/common.h
diff options
authorwm4 <wm4@nowhere>2017-07-24 08:07:32 +0200
committerwm4 <wm4@nowhere>2017-07-24 08:12:42 +0200
commit24dc91907a039b7a86bf6d5b2a0a914bf1f44c3d (patch)
tree0aeb8046536a1d2a799d352112418960387cc94d /common/common.h
parent3d0f86145ce211eee623b661d558ef3405d75933 (diff)
common, vo_opengl: add/use helper for formatted strings on the stack
Seems like I really like this C99 idiom. No reason not to generalize it do snprintf(). Introduce mp_tprintf(), which basically this idiom to snprintf(). This macro looks like it returns a string that was allocated with alloca() on the caller site, except it's portable C99/C11. (And unlike alloca(), the result is valid only within block scope.) Use it in 2 places in the vo_opengl code. But it has the potential to make a whole bunch of weird looking code look slightly nicer.
Diffstat (limited to 'common/common.h')
1 files changed, 8 insertions, 0 deletions
diff --git a/common/common.h b/common/common.h
index 4f944c99ba..fb40d251f1 100644
--- a/common/common.h
+++ b/common/common.h
@@ -101,4 +101,12 @@ char *mp_strerror_buf(char *buf, size_t buf_size, int errnum);
char *mp_tag_str_buf(char *buf, size_t buf_size, uint32_t tag);
#define mp_tag_str(t) mp_tag_str_buf((char[22]){0}, 22, t)
+// Return a printf(format, ...) formatted string of the given SIZE. SIZE must
+// be a compile time constant. The result is allocated on the stack and valid
+// only within the current block scope.
+#define mp_tprintf(SIZE, format, ...) \
+ mp_tprintf_buf((char[SIZE]){0}, (SIZE), (format), __VA_ARGS__)
+char *mp_tprintf_buf(char *buf, size_t buf_size, const char *format, ...)