From 83d3576445ffb71dd134d4fb352ae5434ef8d3d0 Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Tue, 23 Oct 2007 13:48:27 +0200 Subject: [PATCH] Fix mpd_data_delete_item --- src/libmpd.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/libmpd.c b/src/libmpd.c index 7c5be18..441ac6b 100644 --- a/src/libmpd.c +++ b/src/libmpd.c @@ -831,9 +831,8 @@ MpdData* mpd_data_concatenate( MpdData * const first, MpdData * const second) MpdData * mpd_data_delete_item(MpdData *data) { MpdData_real *temp = NULL, *data_real = (MpdData_real*)data; + int first=0; if(data_real == NULL) return NULL; - - if (data_real->next) { data_real->next->prev = data_real->prev; @@ -847,6 +846,25 @@ MpdData * mpd_data_delete_item(MpdData *data) temp = data_real->prev; } + /* fix first, if removed item is the first */ + if(temp->first == data_real) + { + MpdData_real *first,*node = temp; + /* get first */ + for(;node->prev;node = node->prev); + first = node; + while(node){ + node->first = first; + node = node->next; + } + } + /* make this a valid list */ + data_real->next = NULL; + data_real->prev = NULL; + data_real->first = data_real; + /* free it */ + mpd_data_free((MpdData *)data_real); + return (MpdData *)temp; } -- 2.11.4.GIT