free(array);
}
-static int __pakfire_strings_append(char*** array, char* s) {
+int pakfire_strings_append(char*** array, const char* s) {
if (!array)
return -EINVAL;
+ // Copy the string
+ char* p = strdup(s);
+ if (!p)
+ goto ERROR;
+
// Fetch the length
size_t length = pakfire_strings_length(*array);
// Resize the array
*array = reallocarray(*array, length + 2, sizeof(**array));
if (!*array)
- return -errno;
+ goto ERROR;
// Store the string
- (*array)[length++] = s;
+ (*array)[length++] = p;
// Terminate the array
(*array)[length] = NULL;
// Return the total length of the array
return length;
-}
-
-int pakfire_strings_append(char*** array, const char* s) {
- int r;
- // Copy the string
- char* p = strdup(s);
- if (!p)
- return -errno;
-
- // Append it to the array
- r = __pakfire_strings_append(array, p);
- if (r < 0)
+ERROR:
+ if (p)
free(p);
- return r;
+ return -errno;
}
int pakfire_strings_appendf(char*** array, const char* format, ...) {
return -errno;
// Append it to the array
- r = __pakfire_strings_append(array, p);
- if (r < 0)
- free(p);
+ r = pakfire_strings_append(array, p);
+ free(p);
return r;
}