char *format_hash_as_string(const unsigned char *hash, unsigned size);
int create_hash_dir(char **dir, const char *hash, const char *cache_dir);
int create_cachedirtag(const char *dir);
+char *format(const char *format, ...) ATTR_FORMAT(printf, 1, 2);
void x_asprintf(char **ptr, const char *format, ...) ATTR_FORMAT(printf, 2, 3);
char *x_strdup(const char *s);
char *x_strndup(const char *s, size_t n);
return 1;
}
+/* Construct a string according to a format. Caller frees. */
+char*
+format(const char *format, ...)
+{
+ va_list ap;
+ char *ptr = NULL;
+
+ va_start(ap, format);
+ if (vasprintf(&ptr, format, ap) == -1) {
+ fatal("Out of memory in format");
+ }
+ va_end(ap);
+
+ if (!*ptr) fatal("Internal error in format");
+ return ptr;
+}
+
/*
this is like asprintf() but dies if the malloc fails
note that we use vsnprintf in a rather poor way to make this more portable