From 6e82d7e6852fdac4a178445b3e2bcdb6d4e0fa63 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 28 Jul 2013 17:06:33 +0200 Subject: piano: Replace station with same id --- src/libpiano/response.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/libpiano/response.c b/src/libpiano/response.c index 1b63bee..ae7b140 100644 --- a/src/libpiano/response.c +++ b/src/libpiano/response.c @@ -438,15 +438,31 @@ PianoReturn_t PianoResponse (PianoHandle_t *ph, PianoRequest_t *req) { PianoJsonParseStation (result, tmpStation); - /* start new linked list or append */ if (ph->stations == NULL) { ph->stations = tmpStation; } else { - PianoStation_t *curStation = ph->stations; + PianoStation_t *curStation = ph->stations, *prevStation = NULL; while (curStation->next != NULL) { + /* replace if station with same id exists already */ + if (strcmp (curStation->id, tmpStation->id) == 0) { + if (prevStation == NULL) { + ph->stations = tmpStation; + } else { + prevStation->next = tmpStation; + } + tmpStation->next = curStation->next; + + PianoDestroyStation (curStation); + free (curStation); + break; + } + prevStation = curStation; curStation = curStation->next; } - curStation->next = tmpStation; + /* append otherwise */ + if (tmpStation->next == NULL) { + curStation->next = tmpStation; + } } break; } -- cgit v1.2.3