don't confuse myself
[debian/amanda] / server-src / tapefile.c
index 52ece52ee4fba44a0f21f616dc28af4d512cbe42..8e4400bf4a9d49a9a99933661fd80c2bf3c26317 100644 (file)
@@ -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);
+    }
 }