diff src/content.c @ 125:e413158cae13

Add ushare project files.
author naoyan@johnstown.minaminoshima.org
date Sun, 03 Oct 2010 11:35:19 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/content.c	Sun Oct 03 11:35:19 2010 +0900
@@ -0,0 +1,93 @@
+/*
+ * content.c : GeeXboX uShare content list
+ * Originally developped for the GeeXboX project.
+ * Copyright (C) 2005-2007 Alexis Saettler <asbin@asbin.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU 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.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "content.h"
+
+content_list *
+content_add(content_list *list, const char *item)
+{
+  if (!list)
+  {
+    list = (content_list*) malloc (sizeof(content_list));
+    list->content = NULL;
+    list->count = 0;
+  }
+  if (item)
+  {
+    list->count++;
+    list->content = (char**) realloc (list->content, list->count * sizeof(char*));
+    if (!list->content)
+    {
+      perror ("error realloc");
+      exit (2);
+    }
+    list->content[list->count-1] = strdup (item);
+  }
+  return list;
+}
+
+/*
+ * Remove the n'th content (start from 0)
+ */
+content_list *
+content_del(content_list *list, int n)
+{
+  int i;
+
+  if (!list || n >= list->count)
+    return NULL;
+
+  if (n >= list->count)
+    return list;
+
+  if (list->content[n])
+  {
+    free (list->content[n]);
+    for (i = n ; i < list->count - 1 ; i++)
+      list->content[i] = list->content[i+1];
+    list->count--;
+    list->content[list->count] = NULL;
+  }
+
+  return list;
+}
+
+void
+content_free(content_list *list)
+{
+  int i;
+  if (!list)
+    return;
+
+  if (list->content)
+  {
+    for (i=0 ; i < list->count ; i++)
+    {
+      if (list->content[i])
+        free (list->content[i]);
+    }
+    free (list->content);
+  }
+  free (list);
+}