diff options
Diffstat (limited to 'src/libpiano')
| -rw-r--r-- | src/libpiano/response.c | 22 | 
1 files 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;  		} | 
