]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/parse_bsr.c
Fix for reused thread ids by FreeBSD + qfill command
[bacula/bacula] / bacula / src / stored / parse_bsr.c
index 3cc924e8c0bbc60849bc93a9b968ca8b041c399f..73e76e16e9ac92dee5cae91d35472d5ca1381b1a 100755 (executable)
@@ -41,6 +41,7 @@ static BSR *store_joblevel(LEX *lc, BSR *bsr);
 static BSR *store_findex(LEX *lc, BSR *bsr);
 static BSR *store_sessid(LEX *lc, BSR *bsr);
 static BSR *store_volfile(LEX *lc, BSR *bsr);
+static BSR *store_volblock(LEX *lc, BSR *bsr);
 static BSR *store_sesstime(LEX *lc, BSR *bsr);
 static BSR *store_include(LEX *lc, BSR *bsr);
 static BSR *store_exclude(LEX *lc, BSR *bsr);
@@ -69,6 +70,7 @@ struct kw_items items[] = {
    {"include", store_include},
    {"exclude", store_exclude},
    {"volfile", store_volfile},
+   {"volblock", store_volblock},
    {"stream",  store_stream},
    {"slot",    store_slot},
    {NULL, NULL}
@@ -189,7 +191,7 @@ static BSR *store_vol(LEX *lc, BSR *bsr)
       }
       volume = (BSR_VOLUME *)malloc(sizeof(BSR_VOLUME));
       memset(volume, 0, sizeof(BSR_VOLUME));
-      strcpy(volume->VolumeName, p);
+      bstrncpy(volume->VolumeName, p, sizeof(volume->VolumeName));
       /* Add it to the end of the volume chain */
       if (!bsr->volume) {
         bsr->volume = volume;
@@ -216,7 +218,7 @@ static BSR *store_client(LEX *lc, BSR *bsr)
       }
       client = (BSR_CLIENT *)malloc(sizeof(BSR_CLIENT));
       memset(client, 0, sizeof(BSR_CLIENT));
-      strcpy(client->ClientName, lc->str);
+      bstrncpy(client->ClientName, lc->str, sizeof(client->ClientName));
       /* Add it to the end of the client chain */
       if (!bsr->client) {
         bsr->client = client;
@@ -246,7 +248,7 @@ static BSR *store_job(LEX *lc, BSR *bsr)
       }
       job = (BSR_JOB *)malloc(sizeof(BSR_JOB));
       memset(job, 0, sizeof(BSR_JOB));
-      strcpy(job->Job, lc->str);
+      bstrncpy(job->Job, lc->str, sizeof(job->Job));
       /* Add it to the end of the client chain */
       if (!bsr->job) {
         bsr->job = job;
@@ -399,6 +401,41 @@ static BSR *store_volfile(LEX *lc, BSR *bsr)
 }
 
 
+/*
+ * Routine to handle Volume start/end Block  
+ */
+static BSR *store_volblock(LEX *lc, BSR *bsr)
+{
+   int token;
+   BSR_VOLBLOCK *volblock;
+
+   for (;;) {
+      token = lex_get_token(lc, T_PINT32_RANGE);
+      if (token == T_ERROR) {
+        return NULL;
+      }
+      volblock = (BSR_VOLBLOCK *)malloc(sizeof(BSR_VOLBLOCK));
+      memset(volblock, 0, sizeof(BSR_VOLBLOCK));
+      volblock->sblock = lc->pint32_val;
+      volblock->eblock = lc->pint32_val2;
+      /* Add it to the end of the chain */
+      if (!bsr->volblock) {
+        bsr->volblock = volblock;
+      } else {
+        /* Add to end of chain */
+        BSR_VOLBLOCK *bs = bsr->volblock;
+        for ( ;bs->next; bs=bs->next)
+           {  }
+        bs->next = volblock;
+      }
+      token = lex_get_token(lc, T_ALL);
+      if (token != T_COMMA) {
+        break;
+      }
+   }
+   return bsr;
+}
+
 
 static BSR *store_sessid(LEX *lc, BSR *bsr)
 {
@@ -528,6 +565,15 @@ void dump_volfile(BSR_VOLFILE *volfile)
    }
 }
 
+void dump_volblock(BSR_VOLBLOCK *volblock)
+{
+   if (volblock) {
+      Dmsg2(-1, "VolBlock    : %u-%u\n", volblock->sblock, volblock->eblock);
+      dump_volblock(volblock->next);
+   }
+}
+
+
 void dump_findex(BSR_FINDEX *FileIndex)
 {
    if (FileIndex) {
@@ -613,6 +659,7 @@ void dump_bsr(BSR *bsr)
    dump_sessid(bsr->sessid);
    dump_sesstime(bsr->sesstime);
    dump_volfile(bsr->volfile);
+   dump_volblock(bsr->volblock);
    dump_client(bsr->client);
    dump_jobid(bsr->JobId);
    dump_job(bsr->job);
@@ -654,6 +701,7 @@ void free_bsr(BSR *bsr)
    free_bsr_item((BSR *)bsr->sessid);
    free_bsr_item((BSR *)bsr->sesstime);
    free_bsr_item((BSR *)bsr->volfile);
+   free_bsr_item((BSR *)bsr->volblock);
    free_bsr_item((BSR *)bsr->JobId);
    free_bsr_item((BSR *)bsr->job);
    free_bsr_item((BSR *)bsr->FileIndex);
@@ -753,7 +801,7 @@ void create_vol_list(JCR *jcr)
         /* Now add volumes for this bsr */
         for (bsrvol = bsr->volume; bsrvol; bsrvol=bsrvol->next) {
            vol = new_vol();
-           strcpy(vol->VolumeName, bsrvol->VolumeName);
+           bstrncpy(vol->VolumeName, bsrvol->VolumeName, sizeof(vol->VolumeName));
            vol->start_file = sfile;
            if (add_vol(jcr, vol)) {
               jcr->NumVolumes++;
@@ -773,7 +821,7 @@ void create_vol_list(JCR *jcr)
            *n++ = 0;                    /* Terminate name */
         }
         vol = new_vol();
-        strcpy(vol->VolumeName, p);
+        bstrncpy(vol->VolumeName, p, sizeof(vol->VolumeName));
         if (add_vol(jcr, vol)) {
            jcr->NumVolumes++;
         } else {