From 049dec8733c7a5df431c709890a7be00625fc534 Mon Sep 17 00:00:00 2001 Message-Id: <049dec8733c7a5df431c709890a7be00625fc534.1715211966.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 26 Jun 2008 20:40:01 +0100 Subject: [PATCH] New tracks list can no longer contains dupes Organization: Straylight/Edgeware From: Richard Kettlewell --- lib/trackdb.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/trackdb.c b/lib/trackdb.c index b4036f7..718970a 100644 --- a/lib/trackdb.c +++ b/lib/trackdb.c @@ -2422,13 +2422,17 @@ static char **trackdb_new_tid(int *ntracksp, DBT k, d; int err = 0; struct vector tracks[1]; + hash *h = hash_new(1); vector_init(tracks); c = trackdb_opencursor(trackdb_noticeddb, tid); while((maxtracks <= 0 || tracks->nvec < maxtracks) && !(err = c->c_get(c, prepare_data(&k), prepare_data(&d), DB_PREV))) { - /* See if the track still exists */ char *const track = xstrndup(d.data, d.size); + /* Don't add any track more than once */ + if(hash_add(h, track, "", HASH_INSERT)) + continue; + /* See if the track still exists */ err = trackdb_getdata(trackdb_tracksdb, track, NULL/*kp*/, tid); if(err == DB_NOTFOUND) continue; /* It doesn't, skip it */ -- [mdw]