X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_array.c;h=0cc0bd78b380df60f0c15a799006a9344d1bc93a;hb=da4f69af961e91db6605a451dc3040c82c1a7344;hp=e7ac51e784fe9aaa5def1b5fac5fe2c6e0dd70fc;hpb=18acc4106233bdc59011a0a87d2f4a3373d65c9b;p=collection4.git diff --git a/src/utils_array.c b/src/utils_array.c index e7ac51e..0cc0bd7 100644 --- a/src/utils_array.c +++ b/src/utils_array.c @@ -84,6 +84,49 @@ int array_append_format (str_array_t *a, const char *format, ...) /* {{{ */ return (array_append (a, buffer)); } /* }}} int array_append_format */ +int array_prepend (str_array_t *a, const char *entry) /* {{{ */ +{ + char **ptr; + char *cpy; + + if ((entry == NULL) || (a == NULL)) + return (EINVAL); + + cpy = strdup (entry); + if (cpy == NULL) + return (ENOMEM); + + ptr = realloc (a->ptr, sizeof (*a->ptr) * (a->size + 1)); + if (ptr == NULL) + { + free (cpy); + return (ENOMEM); + } + a->ptr = ptr; + + memmove (a->ptr + 1, a->ptr, sizeof (*a->ptr) * a->size); + a->ptr[0] = cpy; + a->size++; + + return (0); +} /* }}} int array_prepend */ + +int array_prepend_format (str_array_t *a, const char *format, ...) /* {{{ */ +{ + char buffer[1024]; + va_list ap; + int status; + + va_start (ap, format); + status = vsnprintf (buffer, sizeof (buffer), format, ap); + va_end(ap); + + if ((status < 0) || (((size_t) status) >= sizeof (buffer))) + return (ENOMEM); + + return (array_prepend (a, buffer)); +} /* }}} int array_prepend_format */ + int array_sort (str_array_t *a) /* {{{ */ { if (a == NULL)