From d296136c3e5fe4ef01ccfc2c86950f1b85b916a7 Mon Sep 17 00:00:00 2001 From: Richard Kettlewell Date: Mon, 27 Oct 2008 20:13:38 +0000 Subject: [PATCH] Versioning for queue files and a heuristic for reconstructing origin fields. --- server/server-queue.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/server/server-queue.c b/server/server-queue.c index c65bf6d..38af055 100644 --- a/server/server-queue.c +++ b/server/server-queue.c @@ -65,6 +65,7 @@ static void queue_do_read(struct queue_entry *head, const char *path) { char *buffer; FILE *fp; struct queue_entry *q; + int version = 0; if(!(fp = fopen(path, "r"))) { if(errno == ENOENT) @@ -73,8 +74,20 @@ static void queue_do_read(struct queue_entry *head, const char *path) { } head->next = head->prev = head; while(!inputline(path, fp, &buffer, '\n')) { + if(buffer[0] == '#') { + /* Version indicator */ + version = atoi(buffer + 1); + continue; + } q = xmalloc(sizeof *q); queue_unmarshall(q, buffer, queue_read_error, (void *)path); + if(version < 1) { + /* Fix up origin field as best we can; will be wrong in some cases but + * hopefully not too horribly so. */ + q->origin = q->submitter ? origin_picked : origin_random; + if(q->state == playing_isscratch) + q->origin = origin_scratch; + } if(head == &qhead && (!q->track || !q->when)) @@ -109,6 +122,9 @@ static void queue_do_write(const struct queue_entry *head, const char *path) { byte_xasprintf(&tmp, "%s.new", path); if(!(fp = fopen(tmp, "w"))) fatal(errno, "error opening %s", tmp); + /* Save version indicator */ + if(fprintf(fp, "#1\n") < 0) + fatal(errno, "error writing %s", tmp); for(q = head->next; q != head; q = q->next) if(fprintf(fp, "%s\n", queue_marshall(q)) < 0) fatal(errno, "error writing %s", tmp); -- 2.11.0