aboutsummaryrefslogtreecommitdiffstats
path: root/src/song_print.c
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-09-23 20:48:39 +0200
committerMax Kellermann <max@duempel.org>2008-09-23 20:48:39 +0200
commit0bec1d38078c88d07939a4c210b7cdeb9c8eb59c (patch)
tree9ec91df91017224ef643060533a657db3c1c53dd /src/song_print.c
parentafe6ce7210be330eefb0e8f18f2b6787bf052087 (diff)
downloadmpd-0bec1d38078c88d07939a4c210b7cdeb9c8eb59c.tar.gz
mpd-0bec1d38078c88d07939a4c210b7cdeb9c8eb59c.tar.xz
mpd-0bec1d38078c88d07939a4c210b7cdeb9c8eb59c.zip
Replace SongList with struct songvec
Our linked-list implementation is wasteful and the SongList isn't modified enough to benefit from being a linked list. So use a more compact array of song pointers which saves ~200K on a library with ~9K songs (on x86-32).
Diffstat (limited to 'src/song_print.c')
-rw-r--r--src/song_print.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/song_print.c b/src/song_print.c
index 77741e768..f754f2348 100644
--- a/src/song_print.c
+++ b/src/song_print.c
@@ -17,6 +17,7 @@
*/
#include "song_print.h"
+#include "songvec.h"
#include "directory.h"
#include "tag_print.h"
#include "client.h"
@@ -41,14 +42,14 @@ int printSongInfo(struct client *client, Song * song)
return 0;
}
-int printSongInfoFromList(struct client *client, SongList * list)
+int songvec_print(struct client *client, const struct songvec *sv)
{
- ListNode *tempNode = list->firstNode;
+ int i;
+ Song **sp = sv->base;
- while (tempNode != NULL) {
- printSongInfo(client, (Song *) tempNode->data);
- tempNode = tempNode->nextNode;
- }
+ for (i = sv->nr; --i >= 0;)
+ if (printSongInfo(client, *sp++) < 0)
+ return -1;
return 0;
}