src/graph_instance.[ch]: Implement "inst_data_to_json".
[collection4.git] / src / utils_array.c
index e7ac51e..2d6250e 100644 (file)
@@ -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 <ff at octo.it>
+ **/
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdarg.h>
@@ -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)