X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/a5fd820123706886efb2fd9fab2a97e9e172691e..3f3cd4c942b8a5f15306ac8ca0d9cfcd4e9391b7:/lib/trackdb.c diff --git a/lib/trackdb.c b/lib/trackdb.c index 24d04ac..4afd925 100644 --- a/lib/trackdb.c +++ b/lib/trackdb.c @@ -840,7 +840,7 @@ static char **dedupe(char **vec, int nvec) { int m, n; qsort(vec, nvec, sizeof (char *), wordcmp); - m = n = 0; + m = 0; if(nvec) { vec[m++] = vec[0]; for(n = 1; n < nvec; ++n) @@ -1823,7 +1823,7 @@ int trackdb_set(const char *track, if(trackdb_putdata(trackdb_prefsdb, track, p, tid, 0)) goto fail; /* compute the new alias name */ - if((err = compute_alias(&newalias, track, p, tid))) goto fail; + if(compute_alias(&newalias, track, p, tid)) goto fail; /* check whether alias has changed */ if(!(oldalias == newalias || (oldalias && newalias && !strcmp(oldalias, newalias)))) { @@ -2176,13 +2176,13 @@ const char *trackdb_getpart(const char *track, DB_TXN *tid; char *pref; const char *actual; - int used_db, err; + int used_db; /* construct the full pref */ byte_xasprintf(&pref, "trackname_%s_%s", context, part); for(;;) { tid = trackdb_begin_transaction(); - if((err = gettrackdata(track, 0, &p, &actual, 0, tid)) == DB_LOCK_DEADLOCK) + if(gettrackdata(track, 0, &p, &actual, 0, tid) == DB_LOCK_DEADLOCK) goto fail; break; fail: @@ -2736,17 +2736,18 @@ int trackdb_rescan_underway(void) { * @param name Global preference name * @param value New value * @param who Who is setting it + * @return 0 on success, -1 on error */ -void trackdb_set_global(const char *name, +int trackdb_set_global(const char *name, const char *value, const char *who) { DB_TXN *tid; - int err; - int state; + int state, err; for(;;) { tid = trackdb_begin_transaction(); - if(!(err = trackdb_set_global_tid(name, value, tid))) + err = trackdb_set_global_tid(name, value, tid); + if(err != DB_LOCK_DEADLOCK) break; trackdb_abort_transaction(tid); } @@ -2766,6 +2767,8 @@ void trackdb_set_global(const char *name, who ? who : "-"); eventlog("state", state ? "enable_random" : "disable_random", (char *)0); } + eventlog("global_pref", name, value, (char *)0); + return err == 0 ? 0 : -1; } /** @brief Set a global preference @@ -2791,7 +2794,7 @@ int trackdb_set_global_tid(const char *name, err = trackdb_globaldb->put(trackdb_globaldb, tid, &k, &d, 0); else err = trackdb_globaldb->del(trackdb_globaldb, tid, &k, 0); - if(err == DB_LOCK_DEADLOCK) return err; + if(err == DB_LOCK_DEADLOCK || err == DB_NOTFOUND) return err; if(err) disorder_fatal(0, "error updating database: %s", db_strerror(err)); return 0; @@ -2803,12 +2806,11 @@ int trackdb_set_global_tid(const char *name, */ const char *trackdb_get_global(const char *name) { DB_TXN *tid; - int err; const char *r; for(;;) { tid = trackdb_begin_transaction(); - if(!(err = trackdb_get_global_tid(name, tid, &r))) + if(!trackdb_get_global_tid(name, tid, &r)) break; trackdb_abort_transaction(tid); } @@ -2912,7 +2914,7 @@ static char **trackdb_new_tid(int *ntracksp, default: disorder_fatal(0, "error reading noticed.db: %s", db_strerror(err)); } - if((err = trackdb_closecursor(c))) + if(trackdb_closecursor(c)) return 0; /* deadlock */ vector_terminate(tracks); if(ntracksp)