X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Ftapefile.c;h=8e4400bf4a9d49a9a99933661fd80c2bf3c26317;hb=d923a3f5bd691defcb8a7013e8ba6521ea2ecca0;hp=52ece52ee4fba44a0f21f616dc28af4d512cbe42;hpb=afaa71b3866b46b082b6c895772e15b36d8865fe;p=debian%2Famanda diff --git a/server-src/tapefile.c b/server-src/tapefile.c index 52ece52..8e4400b 100644 --- a/server-src/tapefile.c +++ b/server-src/tapefile.c @@ -29,6 +29,7 @@ * routines to read and write the amanda active tape list */ #include "amanda.h" +#include "match.h" #include "tapefile.h" #include "conffile.h" @@ -101,6 +102,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"); @@ -133,7 +140,7 @@ clear_tapelist(void) tape_t * lookup_tapelabel( - char *label) + const char *label) { tape_t *tp; @@ -182,6 +189,15 @@ lookup_nb_tape(void) return pos; } + +char * +get_last_reusable_tape_label( + int skip) +{ + tape_t *tp = lookup_last_reusable_tape(skip); + return (tp != NULL) ? tp->label : NULL; +} + tape_t * lookup_last_reusable_tape( int skip) @@ -387,6 +403,35 @@ 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); + } else { + tp->barcode = NULL; + } + + 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); + } else { + tp->meta = NULL; + } + + 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); + } else { + tp->blocksize = 0; + } if (*(s - 1) == '#') { tp->comment = stralloc(s); /* skip leading '#' */ } else { @@ -470,12 +515,12 @@ stamp2time( return mktime(tm); } -void -print_new_tapes( - FILE *output, - int nb) +char * +list_new_tapes( + int nb) { tape_t *lasttp, *iter; + char *result = NULL; /* Find latest reusable new tape */ lasttp = lookup_tapepos(lookup_nb_tape()); @@ -495,23 +540,36 @@ print_new_tapes( } if(c == 1) { - g_fprintf(output, - _("The next new tape already labelled is: %s.\n"), - lasttp->label); + result = g_strdup_printf( + _("The next new tape already labelled is: %s."), + lasttp->label); } else { - g_fprintf(output, - _("The next %d new tapes already labelled are: %s"), - c, lasttp->label); + result = g_strdup_printf( + _("The next %d new tapes already labelled are: %s"), + c, lasttp->label); iter = lasttp->prev; c--; while(iter && c > 0 && strcmp(iter->datestamp,"0") == 0) { if (iter->reuse) { - g_fprintf(output, ", %s", iter->label); + result = vstrextend(&result, ", ", iter->label, NULL); c--; } iter = iter->prev; } - g_fprintf(output, ".\n"); } } + return result; +} + +void +print_new_tapes( + FILE *output, + int nb) +{ + char *result = list_new_tapes(nb); + + if (result) { + g_fprintf(output,"%s\n", result); + amfree(result); + } }