X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Fdisk_history.c;h=8d465bb8e5c8201663fede3bbb002a16334b2c5b;hb=1194fb66aa28d9929c3f2bef3cc6c1c3f40a60a4;hp=21b2c1066228b6dd4fcac347e594d091a9920267;hpb=3ab887b9bc819a846c75dd7f2ee5d41fac22b19f;p=debian%2Famanda diff --git a/server-src/disk_history.c b/server-src/disk_history.c index 21b2c10..8d465bb 100644 --- a/server-src/disk_history.c +++ b/server-src/disk_history.c @@ -23,7 +23,7 @@ * Authors: the Amanda Development Team. Its members are listed in a * file named AUTHORS, in the root directory of this distribution. */ -/* $Id: disk_history.c,v 1.8.10.1 2002/03/24 19:23:23 jrjackson Exp $ +/* $Id: disk_history.c,v 1.12 2006/01/16 00:07:01 martinea Exp $ * * functions for obtaining backup history */ @@ -42,19 +42,28 @@ void clear_list P((void)) { this = item; item = item->next; + while(this->tapes != NULL) { + tapelist_t *tapes = this->tapes; + this->tapes = tapes->next; + amfree(tapes->label); + amfree(tapes->files); + amfree(tapes); + } amfree(this); } disk_hist = NULL; } /* add item, maintain list ordered by oldest date last */ -void add_dump(date, level, tape, file) +void add_dump(date, level, tape, file, partnum) char *date; int level; char *tape; int file; +int partnum; { DUMP_ITEM *new, *item, *before; + int isafile = 0; new = (DUMP_ITEM *)alloc(sizeof(DUMP_ITEM)); strncpy(new->date, date, sizeof(new->date)-1); @@ -63,14 +72,37 @@ int file; strncpy(new->tape, tape, sizeof(new->tape)-1); new->tape[sizeof(new->tape)-1] = '\0'; new->file = file; + if(partnum == -1) new->is_split = 0; + else new->is_split = 1; + new->tapes = NULL; + + if(new->tape[0] == '/') isafile = 1; /* XXX kludgey, like this whole thing */ if (disk_hist == NULL) { disk_hist = new; + new->tapes = append_to_tapelist(new->tapes, tape, file, isafile); new->next = NULL; return; } + /* see if we already have part of this dump somewhere */ + if(new->is_split){ + for(item = disk_hist; item; item = item->next){ + if (!strcmp(item->date, new->date) && + item->level == new->level && item->is_split){ + item->tapes = append_to_tapelist(item->tapes, tape, file, isafile); + amfree(new); + return; + } + } + } + + new->tapes = append_to_tapelist(new->tapes, tape, file, isafile); + + /* prepend this item to the history list, if it's newer */ + /* XXX this should probably handle them being on the same date with + datestamp_uax or something */ if (strcmp(disk_hist->date, new->date) <= 0) { new->next = disk_hist; @@ -78,6 +110,7 @@ int file; return; } + /* append this item to the history list, if it's older */ before = disk_hist; item = disk_hist->next; while ((item != NULL) && (strcmp(item->date, new->date) > 0))