aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-01-02 18:41:35 +0100
committerMax Kellermann <max@duempel.org>2009-01-02 18:41:35 +0100
commit7a8ef820a4c76c83ad1d0e8eb59c1a186d9fa448 (patch)
treeebbda7a9a0a881f312b5b20f452f45caa11d43c7
parente943b9bf13295595a21129dfac425c13209890ca (diff)
downloadmpd-7a8ef820a4c76c83ad1d0e8eb59c1a186d9fa448.tar.gz
mpd-7a8ef820a4c76c83ad1d0e8eb59c1a186d9fa448.tar.xz
mpd-7a8ef820a4c76c83ad1d0e8eb59c1a186d9fa448.zip
list: removed linked list library
It's been superseded by GLib's GSList.
-rw-r--r--src/Makefile.am2
-rw-r--r--src/list.c516
-rw-r--r--src/list.h106
-rw-r--r--src/ls.c1
-rw-r--r--src/playlist.c1
5 files changed, 0 insertions, 626 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 6bb12fda6..1e1e82598 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -38,7 +38,6 @@ mpd_headers = \
input_file.h \
input_curl.h \
client.h \
- list.h \
dlist.h \
listen.h \
log.h \
@@ -119,7 +118,6 @@ mpd_SOURCES = \
input_stream.c \
input_file.c \
client.c \
- list.c \
listen.c \
log.c \
ls.c \
diff --git a/src/list.c b/src/list.c
deleted file mode 100644
index e6c91c0c2..000000000
--- a/src/list.c
+++ /dev/null
@@ -1,516 +0,0 @@
-/* the Music Player Daemon (MPD)
- * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
- * This project's homepage is: http://www.musicpd.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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "list.h"
-#include "utils.h"
-
-#include <assert.h>
-#include <string.h>
-
-static void makeListNodesArray(List * list)
-{
- ListNode *node = list->firstNode;
- long i;
-
- if (!list->numberOfNodes)
- return;
-
- list->nodesArray = xrealloc(list->nodesArray,
- sizeof(ListNode *) * list->numberOfNodes);
-
- for (i = 0; i < list->numberOfNodes; i++) {
- list->nodesArray[i] = node;
- node = node->nextNode;
- }
-}
-
-static void freeListNodesArray(List * list)
-{
- if (!list->nodesArray)
- return;
- free(list->nodesArray);
- list->nodesArray = NULL;
-}
-
-List *makeList(ListFreeDataFunc * freeDataFunc, int strdupKeys)
-{
- List *list = xmalloc(sizeof(List));
-
- assert(list != NULL);
-
- list->sorted = 0;
- list->firstNode = NULL;
- list->lastNode = NULL;
- list->freeDataFunc = freeDataFunc;
- list->numberOfNodes = 0;
- list->nodesArray = NULL;
- list->strdupKeys = strdupKeys;
-
- return list;
-}
-
-ListNode *insertInListBeforeNode(List * list, ListNode * beforeNode, int pos,
- const char *key, void *data)
-{
- ListNode *node;
-
- assert(list != NULL);
- assert(key != NULL);
- /*assert(data!=NULL); */
-
- node = xmalloc(sizeof(ListNode));
- assert(node != NULL);
-
- node->nextNode = beforeNode;
- if (beforeNode == list->firstNode) {
- if (list->firstNode == NULL) {
- assert(list->lastNode == NULL);
- list->lastNode = node;
- } else {
- assert(list->lastNode != NULL);
- assert(list->lastNode->nextNode == NULL);
- list->firstNode->prevNode = node;
- }
- node->prevNode = NULL;
- list->firstNode = node;
- } else {
- if (beforeNode) {
- node->prevNode = beforeNode->prevNode;
- beforeNode->prevNode = node;
- } else {
- node->prevNode = list->lastNode;
- list->lastNode = node;
- }
- node->prevNode->nextNode = node;
- }
-
- if (list->strdupKeys)
- node->key = xstrdup(key);
- else
- node->key = key;
-
- node->data = data;
-
- list->numberOfNodes++;
-
- if (list->sorted) {
- list->nodesArray = xrealloc(list->nodesArray,
- list->numberOfNodes *
- sizeof(ListNode *));
- if (node == list->lastNode) {
- list->nodesArray[list->numberOfNodes - 1] = node;
- } else if (pos < 0)
- makeListNodesArray(list);
- else {
- memmove(list->nodesArray + pos + 1,
- list->nodesArray + pos,
- sizeof(ListNode *) * (list->numberOfNodes -
- pos - 1));
- list->nodesArray[pos] = node;
- }
- }
-
- return node;
-}
-
-ListNode *insertInList(List * list, const char *key, void *data)
-{
- ListNode *node;
-
- assert(list != NULL);
- assert(key != NULL);
- /*assert(data!=NULL); */
-
- node = xmalloc(sizeof(ListNode));
- assert(node != NULL);
-
- if (list->nodesArray)
- freeListNodesArray(list);
-
- if (list->firstNode == NULL) {
- assert(list->lastNode == NULL);
- list->firstNode = node;
- } else {
- assert(list->lastNode != NULL);
- assert(list->lastNode->nextNode == NULL);
- list->lastNode->nextNode = node;
- }
-
- if (list->strdupKeys)
- node->key = xstrdup(key);
- else
- node->key = key;
-
- node->data = data;
- node->nextNode = NULL;
- node->prevNode = list->lastNode;
-
- list->lastNode = node;
-
- list->numberOfNodes++;
-
- return node;
-}
-
-int insertInListWithoutKey(List * list, void *data)
-{
- ListNode *node;
-
- assert(list != NULL);
- assert(data != NULL);
-
- node = xmalloc(sizeof(ListNode));
- assert(node != NULL);
-
- if (list->nodesArray)
- freeListNodesArray(list);
-
- if (list->firstNode == NULL) {
- assert(list->lastNode == NULL);
- list->firstNode = node;
- } else {
- assert(list->lastNode != NULL);
- assert(list->lastNode->nextNode == NULL);
- list->lastNode->nextNode = node;
- }
-
- node->key = NULL;
- node->data = data;
- node->nextNode = NULL;
- node->prevNode = list->lastNode;
-
- list->lastNode = node;
-
- list->numberOfNodes++;
-
- return 1;
-}
-
-/* if _key_ is not found, *_node_ is assigned to the node before which
- the info would be found */
-int findNodeInList(List * list, const char *key, ListNode ** node, int *pos)
-{
- long high;
- long low;
- long cur;
- ListNode *tmpNode;
- int cmp;
-
- assert(list != NULL);
-
- if (list->sorted && list->nodesArray) {
- high = list->numberOfNodes - 1;
- low = 0;
- cur = high;
-
- while (high > low) {
- cur = (high + low) / 2;
- tmpNode = list->nodesArray[cur];
- cmp = strcmp(tmpNode->key, key);
- if (cmp == 0) {
- *node = tmpNode;
- *pos = cur;
- return 1;
- } else if (cmp > 0)
- high = cur;
- else {
- if (low == cur)
- break;
- low = cur;
- }
- }
-
- cur = high;
- if (cur >= 0) {
- tmpNode = list->nodesArray[cur];
- *node = tmpNode;
- *pos = high;
- cmp = tmpNode ? strcmp(tmpNode->key, key) : -1;
- if (0 == cmp)
- return 1;
- else if (cmp > 0)
- return 0;
- else {
- *pos = -1;
- *node = NULL;
- return 0;
- }
- } else {
- *pos = 0;
- *node = list->firstNode;
- return 0;
- }
- } else {
- tmpNode = list->firstNode;
-
- while (tmpNode != NULL && strcmp(tmpNode->key, key) != 0) {
- tmpNode = tmpNode->nextNode;
- }
-
- *node = tmpNode;
- if (tmpNode)
- return 1;
- }
-
- return 0;
-}
-
-int findInList(List * list, const char *key, void **data)
-{
- ListNode *node;
- int pos;
-
- if (findNodeInList(list, key, &node, &pos)) {
- if (data)
- *data = node->data;
- return 1;
- }
-
- return 0;
-}
-
-int deleteFromList(List * list, const char *key)
-{
- ListNode *tmpNode;
-
- assert(list != NULL);
-
- tmpNode = list->firstNode;
-
- while (tmpNode != NULL && strcmp(tmpNode->key, key) != 0) {
- tmpNode = tmpNode->nextNode;
- }
-
- if (tmpNode != NULL)
- deleteNodeFromList(list, tmpNode);
- else
- return 0;
-
- return 1;
-}
-
-void deleteNodeFromList(List * list, ListNode * node)
-{
- assert(list != NULL);
- assert(node != NULL);
-
- if (node->prevNode == NULL) {
- list->firstNode = node->nextNode;
- } else {
- node->prevNode->nextNode = node->nextNode;
- }
- if (node->nextNode == NULL) {
- list->lastNode = node->prevNode;
- } else {
- node->nextNode->prevNode = node->prevNode;
- }
- if (list->freeDataFunc) {
- list->freeDataFunc(node->data);
- }
-
- if (list->strdupKeys)
- xfree(node->key);
- free(node);
- list->numberOfNodes--;
-
- if (list->nodesArray) {
- freeListNodesArray(list);
- if (list->sorted)
- makeListNodesArray(list);
- }
-
-}
-
-void freeList(void *list)
-{
- ListNode *tmpNode;
- ListNode *tmpNode2;
-
- assert(list != NULL);
-
- tmpNode = ((List *) list)->firstNode;
-
- if (((List *) list)->nodesArray)
- free(((List *) list)->nodesArray);
-
- while (tmpNode != NULL) {
- tmpNode2 = tmpNode->nextNode;
- if (((List *) list)->strdupKeys)
- xfree(tmpNode->key);
- if (((List *) list)->freeDataFunc) {
- ((List *) list)->freeDataFunc(tmpNode->data);
- }
- free(tmpNode);
- tmpNode = tmpNode2;
- }
-
- free(list);
-}
-
-static void swapNodes(ListNode * nodeA, ListNode * nodeB)
-{
- const char *key;
- void *data;
-
- assert(nodeA != NULL);
- assert(nodeB != NULL);
-
- key = nodeB->key;
- data = nodeB->data;
-
- nodeB->key = nodeA->key;
- nodeB->data = nodeA->data;
-
- nodeA->key = key;
- nodeA->data = data;
-}
-
-static void bubbleSort(ListNode ** nodesArray, long start, long end)
-{
- long i;
- long j;
- ListNode *node;
-
- if (start >= end)
- return;
-
- for (j = start; j < end; j++) {
- for (i = end - 1; i >= start; i--) {
- node = nodesArray[i];
- if (strcmp(node->key, node->nextNode->key) > 0) {
- swapNodes(node, node->nextNode);
- }
- }
- }
-}
-
-static void quickSort(ListNode ** nodesArray, long start, long end)
-{
- if (start >= end)
- return;
- else if (end - start < 5)
- bubbleSort(nodesArray, start, end);
- else {
- long i;
- ListNode *node;
- long pivot;
- ListNode *pivotNode;
- const char *pivotKey;
-
- List *startList = makeList(free, 0);
- List *endList = makeList(free, 0);
- long *startPtr = xmalloc(sizeof(long));
- long *endPtr = xmalloc(sizeof(long));
- *startPtr = start;
- *endPtr = end;
- insertInListWithoutKey(startList, (void *)startPtr);
- insertInListWithoutKey(endList, (void *)endPtr);
-
- while (startList->numberOfNodes) {
- start = *((long *)startList->lastNode->data);
- end = *((long *)endList->lastNode->data);
-
- if (end - start < 5) {
- bubbleSort(nodesArray, start, end);
- deleteNodeFromList(startList,
- startList->lastNode);
- deleteNodeFromList(endList, endList->lastNode);
- } else {
- pivot = (start + end) / 2;
- pivotNode = nodesArray[pivot];
- pivotKey = pivotNode->key;
-
- for (i = pivot - 1; i >= start; i--) {
- node = nodesArray[i];
- if (strcmp(node->key, pivotKey) > 0) {
- pivot--;
- if (pivot > i) {
- swapNodes(node,
- nodesArray
- [pivot]);
- }
- swapNodes(pivotNode,
- nodesArray[pivot]);
- pivotNode = nodesArray[pivot];
- }
- }
- for (i = pivot + 1; i <= end; i++) {
- node = nodesArray[i];
- if (strcmp(pivotKey, node->key) > 0) {
- pivot++;
- if (pivot < i) {
- swapNodes(node,
- nodesArray
- [pivot]);
- }
- swapNodes(pivotNode,
- nodesArray[pivot]);
- pivotNode = nodesArray[pivot];
- }
- }
-
- deleteNodeFromList(startList,
- startList->lastNode);
- deleteNodeFromList(endList, endList->lastNode);
-
- if (pivot - 1 - start > 0) {
- startPtr = xmalloc(sizeof(long));
- endPtr = xmalloc(sizeof(long));
- *startPtr = start;
- *endPtr = pivot - 1;
- insertInListWithoutKey(startList,
- (void *)
- startPtr);
- insertInListWithoutKey(endList,
- (void *)endPtr);
- }
-
- if (end - pivot - 1 > 0) {
- startPtr = xmalloc(sizeof(long));
- endPtr = xmalloc(sizeof(long));
- *startPtr = pivot + 1;
- *endPtr = end;
- insertInListWithoutKey(startList,
- (void *)
- startPtr);
- insertInListWithoutKey(endList,
- (void *)endPtr);
- }
- }
- }
-
- freeList(startList);
- freeList(endList);
- }
-}
-
-void sortList(List * list)
-{
- assert(list != NULL);
-
- list->sorted = 1;
-
- if (list->numberOfNodes < 2)
- return;
-
- if (list->nodesArray)
- freeListNodesArray(list);
- makeListNodesArray(list);
-
- quickSort(list->nodesArray, 0, list->numberOfNodes - 1);
-}
diff --git a/src/list.h b/src/list.h
deleted file mode 100644
index 7f0288035..000000000
--- a/src/list.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* the Music Player Daemon (MPD)
- * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
- * This project's homepage is: http://www.musicpd.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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef MPD_LIST_H
-#define MPD_LIST_H
-
-/* used to make a list where free() will be used to free data in list */
-#define DEFAULT_FREE_DATA_FUNC free
-
-/* typedef for function to free data stored in the list nodes */
-typedef void ListFreeDataFunc(void *);
-
-typedef struct _ListNode {
- /* used to identify node (ie. when using findInList) */
- const char *key;
- /* data store in node */
- void *data;
- /* next node in list */
- struct _ListNode *nextNode;
- /* previous node in list */
- struct _ListNode *prevNode;
-} ListNode;
-
-typedef struct _List {
- /* first node in list */
- ListNode *firstNode;
- /* last node in list */
- ListNode *lastNode;
- /* function used to free data stored in nodes of the list */
- ListFreeDataFunc *freeDataFunc;
- /* number of nodes */
- long numberOfNodes;
- /* array for searching when list is sorted */
- ListNode **nodesArray;
- /* sorted */
- int sorted;
- /* whether to strdup() key's on insertion */
- int strdupKeys;
-} List;
-
-/* allocates memory for a new list and initializes it
- * _freeDataFunc_ -> pointer to function used to free data, use
- * DEFAULT_FREE_DATAFUNC to use free()
- * returns pointer to new list if successful, NULL otherwise
- */
-List *makeList(ListFreeDataFunc * freeDataFunc, int strdupKeys);
-
-/* inserts a node into _list_ with _key_ and _data_
- * _list_ -> list the data will be inserted in
- * _key_ -> identifier for node/data to be inserted into list
- * _data_ -> data to be inserted in list
- * returns 1 if successful, 0 otherwise
- */
-ListNode *insertInList(List * list, const char *key, void *data);
-
-ListNode *insertInListBeforeNode(List * list, ListNode * beforeNode,
- int pos, const char *key, void *data);
-
-int insertInListWithoutKey(List * list, void *data);
-
-/* deletes the first node in the list with the key _key_
- * _list_ -> list the node will be deleted from
- * _key_ -> key used to identify node to delete
- * returns 1 if node is found and deleted, 0 otherwise
- */
-int deleteFromList(List * list, const char *key);
-
-void deleteNodeFromList(List * list, ListNode * node);
-
-/* finds data in a list based on key
- * _list_ -> list to search for _key_ in
- * _key_ -> which node is being searched for
- * _data_ -> a pointer to where data will be placed,
- * _data_ memory should not by allocated or freed
- * _data_ can be NULL
- * returns 1 if successful, 0 otherwise
- */
-int findInList(List * list, const char *key, void **data);
-
-/* if _key_ is not found, *_node_ is assigned to the node before which
- the info would be found */
-int findNodeInList(List * list, const char *key, ListNode ** node, int *pos);
-
-/* frees memory malloc'd for list and its nodes
- * _list_ -> List to be free'd
- */
-void freeList(void *list);
-
-void sortList(List * list);
-
-#endif
diff --git a/src/ls.c b/src/ls.c
index 0c99866fd..1d5c56661 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -21,7 +21,6 @@
#include "path.h"
#include "client.h"
#include "log.h"
-#include "list.h"
#include "stored_playlist.h"
#include "config.h"
diff --git a/src/playlist.c b/src/playlist.c
index 303c54a6a..c36bb4bbe 100644
--- a/src/playlist.c
+++ b/src/playlist.c
@@ -34,7 +34,6 @@
#include "stored_playlist.h"
#include "ack.h"
#include "idle.h"
-#include "list.h"
#include <glib.h>