shared: add str_printf()
[src/agl-compositor.git] / shared / string-helpers.h
index c8ce449..3c2f07f 100644 (file)
@@ -27,6 +27,7 @@
 #define WESTON_STRING_HELPERS_H
 
 #include <stdbool.h>
+#include <stdarg.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <errno.h>
@@ -68,4 +69,29 @@ safe_strtoint(const char *str, int32_t *value)
        return true;
 }
 
+/**
+ * Exactly like asprintf(), but sets *str_out to NULL if it fails.
+ *
+ * If str_out is NULL, does nothing.
+ */
+static inline void __attribute__ ((format (printf, 2, 3)))
+str_printf(char **str_out, const char *fmt, ...)
+{
+       char *msg;
+       va_list ap;
+       int ret;
+
+       if (!str_out)
+               return;
+
+       va_start(ap, fmt);
+       ret = vasprintf(&msg, fmt, ap);
+       va_end(ap);
+
+       if (ret >= 0)
+               *str_out = msg;
+       else
+               *str_out = NULL;
+}
+
 #endif /* WESTON_STRING_HELPERS_H */