X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Ftapefile.c;h=35cbef231c1619a5c7e8f90f6bba25650ec61ef1;hb=HEAD;hp=d3afe12bbfd42bb467554ad395c48578e3f1b581;hpb=fd48f3e498442f0cbff5f3606c7c403d0566150e;p=debian%2Famanda diff --git a/server-src/tapefile.c b/server-src/tapefile.c index d3afe12..35cbef2 100644 --- a/server-src/tapefile.c +++ b/server-src/tapefile.c @@ -1,6 +1,7 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1998 University of Maryland at College Park + * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -50,7 +51,7 @@ read_tapelist( char *line = NULL; int status = 0; - tape_list = NULL; + clear_tapelist(); if((tapef = fopen(tapefile,"r")) == NULL) { if (errno == ENOENT) { /* no tapelist is equivalent to an empty tapelist */ @@ -102,6 +103,12 @@ write_tapelist( g_fprintf(tapef, "%s %s", tp->datestamp, tp->label); if(tp->reuse) g_fprintf(tapef, " reuse"); else g_fprintf(tapef, " no-reuse"); + if (tp->barcode) + g_fprintf(tapef, " BARCODE:%s", tp->barcode); + if (tp->meta) + g_fprintf(tapef, " META:%s", tp->meta); + if (tp->blocksize) + g_fprintf(tapef, " BLOCKSIZE:%jd", (intmax_t)tp->blocksize); if (tp->comment) g_fprintf(tapef, " #%s", tp->comment); g_fprintf(tapef, "\n"); @@ -126,6 +133,9 @@ clear_tapelist(void) for(tp = tape_list; tp; tp = next) { amfree(tp->label); amfree(tp->datestamp); + amfree(tp->barcode); + amfree(tp->meta); + amfree(tp->comment); next = tp->next; amfree(tp); } @@ -269,6 +279,9 @@ remove_tapelabel( } amfree(tp->datestamp); amfree(tp->label); + amfree(tp->meta); + amfree(tp->comment); + amfree(tp->barcode); amfree(tp); } } @@ -283,7 +296,7 @@ add_tapelabel( /* insert a new record to the front of the list */ - new = (tape_t *) alloc(SIZEOF(tape_t)); + new = g_new0(tape_t, 1); new->datestamp = stralloc(datestamp); new->position = 0; @@ -354,21 +367,21 @@ parse_tapeline( tape_t *tp = NULL; char *s, *s1; int ch; + char *cline; *status = 0; - tp = (tape_t *) alloc(SIZEOF(tape_t)); - - tp->prev = NULL; - tp->next = NULL; s = line; ch = *s++; skip_whitespace(s, ch); if(ch == '\0') { - amfree(tp); return NULL; } + + cline = g_strdup(line); + tp = g_new0(tape_t, 1); + s1 = s - 1; skip_non_whitespace(s, ch); s[-1] = '\0'; @@ -397,10 +410,33 @@ parse_tapeline( skip_whitespace(s, ch); } + if (strncmp_const(s - 1, "BARCODE:") == 0) { + s1 = s - 1 + 8; + skip_non_whitespace(s, ch); + s[-1] = '\0'; + skip_whitespace(s, ch); + tp->barcode = stralloc(s1); + } + + if (strncmp_const(s - 1, "META:") == 0) { + s1 = s - 1 + 5; + skip_non_whitespace(s, ch); + s[-1] = '\0'; + skip_whitespace(s, ch); + tp->meta = stralloc(s1); + } + + if (strncmp_const(s - 1, "BLOCKSIZE:") == 0) { + s1 = s - 1 + 10; + skip_non_whitespace(s, ch); + s[-1] = '\0'; + skip_whitespace(s, ch); + tp->blocksize = atol(s1); + } if (*(s - 1) == '#') { tp->comment = stralloc(s); /* skip leading '#' */ - } else { - tp->comment = NULL; + } else if (*(s-1)) { + g_critical("Bogus line in the tapelist file: %s", cline); } return tp;