X-Git-Url: https://git.octo.it/?p=collection4.git;a=blobdiff_plain;f=src%2Futils_array.c;h=2d6250efd634bc90e542d030a7d6336788fb2f75;hp=e7ac51e784fe9aaa5def1b5fac5fe2c6e0dd70fc;hb=2ef734476e3511b6f1c2611875e340b6b8ca2d4c;hpb=18acc4106233bdc59011a0a87d2f4a3373d65c9b diff --git a/src/utils_array.c b/src/utils_array.c index e7ac51e..2d6250e 100644 --- a/src/utils_array.c +++ b/src/utils_array.c @@ -1,3 +1,26 @@ +/** + * collection4 - utils_array.c + * Copyright (C) 2010 Florian octo Forster + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: + * Florian octo Forster + **/ + #include #include #include @@ -84,6 +107,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)