]> git.sur5r.net Git - bacula/bacula/commitdiff
Misc
authorKern Sibbald <kern@sibbald.com>
Sun, 18 Jul 2004 16:05:07 +0000 (16:05 +0000)
committerKern Sibbald <kern@sibbald.com>
Sun, 18 Jul 2004 16:05:07 +0000 (16:05 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1482 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/lib/bsys.c
bacula/src/lib/edit.c
bacula/src/stored/acquire.c
bacula/src/stored/bcopy.c
bacula/src/stored/bextract.c
bacula/src/stored/bls.c
bacula/src/stored/bscan.c
bacula/src/stored/btape.c
bacula/src/stored/dev.c
bacula/src/stored/spool.c
bacula/src/version.h

index ff4cdd543a37f389219a600be907afd5c5cda217..a375d728aca5800405b9644744bebe35ccddf5c5 100644 (file)
@@ -110,34 +110,13 @@ void *bcalloc (size_t size1, size_t size2)
  */
 int bsnprintf(char *str, int32_t size, const char *fmt,  ...) 
 {
-#ifdef HAVE_VSNPRINTF
-   va_list   arg_ptr;
-   int len;
-
-   va_start(arg_ptr, fmt);
-   len = vsnprintf(str, size, fmt, arg_ptr);
-   va_end(arg_ptr);
-   str[size-1] = 0;
-   return len;
-
-#else
-
    va_list   arg_ptr;
    int len;
-   char *buf;
 
-   buf = get_memory(BIG_BUF);
    va_start(arg_ptr, fmt);
-   len = vsprintf(buf, fmt, arg_ptr);
+   len = bvsnprintf(str, size, fmt, arg_ptr);
    va_end(arg_ptr);
-   if (len >= BIG_BUF) {
-      Emsg0(M_ABORT, 0, _("Buffer overflow.\n"));
-   }
-   memcpy(str, buf, size);
-   str[size-1] = 0;
-   free_memory(buf);
    return len;
-#endif
 }
 
 /*
index 10b3e5a9e5732056e5eca82495d83b1d79ccdf80..a420656eb4f79217700bb692239809183321e263 100644 (file)
@@ -77,7 +77,6 @@ int64_t str_to_int64(char *str)
 }
 
 
-
 /*
  * Edit an integer number with commas, the supplied buffer
  * must be at least 27 bytes long.  The incoming number
@@ -85,7 +84,21 @@ int64_t str_to_int64(char *str)
  */
 char *edit_uint64_with_commas(uint64_t val, char *buf)
 {
-   sprintf(buf, "%" llu, val);
+   /*  
+    * Replacement for sprintf(buf, "%" llu, val)
+    */
+   char mbuf[50];
+   mbuf[sizeof(mbuf)-1] = 0;
+   int i = sizeof(mbuf)-2;                /* edit backward */
+   if (val == 0) {
+      mbuf[i--] = '0';
+   } else {
+      while (val != 0) {
+         mbuf[i--] = "0123456789"[val%10];
+        val /= 10;
+      }
+   }
+   strcpy(buf, &mbuf[i+1]);
    return add_commas(buf, buf);
 }
 
@@ -96,7 +109,21 @@ char *edit_uint64_with_commas(uint64_t val, char *buf)
  */
 char *edit_uint64(uint64_t val, char *buf)
 {
-   sprintf(buf, "%" llu, val);
+   /*  
+    * Replacement for sprintf(buf, "%" llu, val)
+    */
+   char mbuf[50];
+   mbuf[sizeof(mbuf)-1] = 0;
+   int i = sizeof(mbuf)-2;                /* edit backward */
+   if (val == 0) {
+      mbuf[i--] = '0';
+   } else {
+      while (val != 0) {
+         mbuf[i--] = "0123456789"[val%10];
+        val /= 10;
+      }
+   }
+   strcpy(buf, &mbuf[i+1]);
    return buf;
 }
 
index a1b2d5458ac7d7c97c8495234f610e15d6ed4883..e1fe5acfab31b17050ca8bc02537731ff9ce196c 100644 (file)
@@ -46,13 +46,22 @@ DCR *new_dcr(JCR *jcr, DEVICE *dev)
    dcr->rec = new_record();
    dcr->spool_fd = -1;
    dcr->max_spool_size = dev->device->max_spool_size;
-// dev->attached_dcrs->append(dcr);
+   /* Attach this dcr only if dev is initialized */
+   if (dev->fd != 0 && jcr && jcr->JobType != JT_SYSTEM) {
+      dev->attached_dcrs->append(dcr);
+   }
    return dcr;
 }
 
 void free_dcr(DCR *dcr)
 {
-// dcr->dev->attached_dcrs->remove(dcr);
+   JCR *jcr = dcr->jcr;
+   DEVICE *dev = dcr->dev;
+
+   /* Detach this dcr only if the dev is initialized */
+   if (dev->fd != 0 && jcr && jcr->JobType != JT_SYSTEM) {
+      dcr->dev->attached_dcrs->remove(dcr);
+   }
    if (dcr->block) {
       free_block(dcr->block);
    }
index 29e2c9e4830d559b10fc377245d768fe4fba0378..c212fe67fc6001da900f6f423164b897495cbddd 100644 (file)
@@ -175,10 +175,11 @@ int main (int argc, char *argv[])
 
    Pmsg2(000, _("%u Jobs copied. %u records copied.\n"), jobs, records);
 
-   term_dev(in_dev);
-   term_dev(out_dev);
    free_jcr(in_jcr);
    free_jcr(out_jcr);
+
+   term_dev(in_dev);
+   term_dev(out_dev);
    return 0;
 }
   
index d68bd73be8003ad24fd1ea1647ce71b2c026c07d..0334f3f91f215215b8cafc5e0fc47008dcdcd5fe 100644 (file)
@@ -230,10 +230,10 @@ static void do_extract(char *devname)
       set_attributes(jcr, attr, &bfd);
    }
    release_device(jcr);
-
    free_attr(attr);
-   term_dev(dev);
    free_jcr(jcr);
+   term_dev(dev);
+
    printf("%u files restored.\n", num_files);
    return;
 }
index 65e3a2a13a2ecbb5af3e71a1943d7cd21e227877..34b879e1d7a9b02448025a5b82cea320845763d1 100644 (file)
@@ -240,10 +240,10 @@ static void do_close(JCR *jcr)
 {
    release_device(jcr);
    free_attr(attr);
-   term_dev(dev);
    free_record(rec);
    free_block(block);
    free_jcr(jcr);
+   term_dev(dev);
 }
 
 
index add9076726e0191fea7f76872f3b1a9fede8a18c..cea25ce223759e94755ec0f8ca871b487421df1c 100644 (file)
@@ -266,6 +266,7 @@ int main (int argc, char *argv[])
       num_media, num_pools, num_jobs, num_files);
 
    free_jcr(bjcr);
+   term_dev(dev);
    return 0;
 }
   
@@ -322,7 +323,6 @@ static void do_scan()
    release_device(bjcr);
 
    free_attr(attr);
-   term_dev(dev);
 }
 
 /*
index 8f0199565d143ad8e57eaa90a5dc57452dcca253..ee168b41e53c2a2002641d90c062dd80c53ca7d9 100644 (file)
@@ -266,20 +266,20 @@ static void terminate_btape(int stat)
       cmd = NULL;
    }
 
-   if (dev) {
-      term_dev(dev);
+   if (bsr) {
+      free_bsr(bsr);
    }
 
-   if (debug_level > 10)
-      print_memory_pool_stats(); 
-
    free_jcr(jcr);
    jcr = NULL;
 
-   if (bsr) {
-      free_bsr(bsr);
+   if (dev) {
+      term_dev(dev);
    }
 
+   if (debug_level > 10)
+      print_memory_pool_stats(); 
+
    if (this_block) {
       free_block(this_block);
    }
index d3253f5eabbefb7e184c95744beffd403c47dcfc..05028004c7ec068d5322bc79c90521846a425d93 100644 (file)
@@ -197,13 +197,11 @@ init_dev(DEVICE *dev, DEVRES *device)
       Mmsg1(&dev->errmsg, _("Unable to init mutex: ERR=%s\n"), strerror(errstat));
       Emsg0(M_FATAL, 0, dev->errmsg);
    }
-#ifdef xxx
    if ((errstat = rwl_init(&dev->lock)) != 0) {
       dev->dev_errno = errstat;
       Mmsg1(&dev->errmsg, _("Unable to init mutex: ERR=%s\n"), strerror(errstat));
       Emsg0(M_FATAL, 0, dev->errmsg);
    }
-#endif
 
    dev->fd = -1;
    dev->attached_dcrs = new dlist(dcr, &dcr->dev_link);
@@ -1405,6 +1403,7 @@ term_dev(DEVICE *dev)
    pthread_cond_destroy(&dev->wait);
    pthread_cond_destroy(&dev->wait_next_vol);
    pthread_mutex_destroy(&dev->spool_mutex);
+   rwl_destroy(&dev->lock);
    if (dev->attached_dcrs) {
       delete dev->attached_dcrs;
       dev->attached_dcrs = NULL;
index 0267c248d330f76e40d1bb10ff836df25aaf3938..0dd49a36d4568bfa4b1155a9924c2df3411717f9 100644 (file)
@@ -184,6 +184,8 @@ static bool close_data_spool_file(JCR *jcr)
    return true;
 }
 
+static const char *spool_name = "*spool*";
+
 static bool despool_data(DCR *dcr, bool commit) 
 {
    DEVICE *rdev;
@@ -202,11 +204,15 @@ static bool despool_data(DCR *dcr, bool commit)
    lock_device(dcr->dev);
    dcr->dev_locked = true; 
 
-   /* Setup a dev structure to read */
+   /* 
+    * This is really quite kludgy and should be fixed some time.
+    * We create a dev structure to read from the spool file 
+    * in rdev and rdcr.
+    */
    rdev = (DEVICE *)malloc(sizeof(DEVICE));
    memset(rdev, 0, sizeof(DEVICE));
-   rdev->dev_name = get_memory(strlen("spool")+1);
-   strcpy(rdev->dev_name, "spool");
+   rdev->dev_name = get_memory(strlen(spool_name)+1);
+   strcpy(rdev->dev_name, spool_name);
    rdev->errmsg = get_pool_memory(PM_EMSG);
    *rdev->errmsg = 0;
    rdev->max_block_size = dcr->dev->max_block_size;
@@ -216,6 +222,7 @@ static bool despool_data(DCR *dcr, bool commit)
    rdcr->spool_fd = dcr->spool_fd; 
    rdcr->jcr = jcr;                  /* set a valid jcr */
    block = rdcr->block;
+
    Dmsg1(800, "read/write block size = %d\n", block->buf_len);
    lseek(rdcr->spool_fd, 0, SEEK_SET); /* rewind */
 
@@ -256,9 +263,10 @@ static bool despool_data(DCR *dcr, bool commit)
    V(dcr->dev->spool_mutex);
    free_memory(rdev->dev_name);
    free_pool_memory(rdev->errmsg);
-   free(rdev);
+   /* Be careful to NULL the jcr and free rdev after free_dcr() */
    rdcr->jcr = NULL;
    free_dcr(rdcr);
+   free(rdev);
    unlock_device(dcr->dev);
    dcr->dev_locked = false;
    dcr->spooling = true;          /* turn on spooling again */
index af92258e60c6c3d121e53de6044dd4886f7ea067..2c8ff5b7731e4053698d56007b6f2a8c0c2de38a 100644 (file)
@@ -1,9 +1,8 @@
 /* */
 #undef  VERSION
 #define VERSION "1.35.1"
-#define VSTRING "1"
-#define BDATE   "17 July 2004"
-#define LSMDATE "17Jul04"
+#define BDATE   "18 July 2004"
+#define LSMDATE "18Jul04"
 
 /* Debug flags */
 #undef  DEBUG