*/
#define pakfire_string_format(s, format, ...) \
__pakfire_string_format(s, sizeof(s), format, __VA_ARGS__)
-int __pakfire_string_format(char* s, const size_t length, const char* format, ...)
- __attribute__((format(printf, 3, 4)));;;
+int __pakfire_string_format(char* s, const size_t length,
+ const char* format, ...) __attribute__((format(printf, 3, 4)));
+int __pakfire_string_vformat(char* s, const size_t length,
+ const char* format, va_list args) __attribute__((format(printf, 3, 0)));
/*
Simpler version when a string needs to be copied.
int __pakfire_string_format(char* s, const size_t length, const char* format, ...) {
va_list args;
+ int r;
- // Write string to buffer
+ // Call __pakfire_string_vformat
va_start(args, format);
- const ssize_t required = vsnprintf(s, length, format, args);
+ r = __pakfire_string_vformat(s, length, format, args);
va_end(args);
+ return r;
+}
+
+int __pakfire_string_vformat(char* s, const size_t length, const char* format, va_list args) {
+ // Write string to buffer
+ const ssize_t required = vsnprintf(s, length, format, args);
+
// Catch any errors
if (required < 0)
return 1;