]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/mem_pool.c
Working directory pane in restore. Will get this into the stack next.
[bacula/bacula] / bacula / src / lib / mem_pool.c
index 686c164e66de160c9e32d1dcc1e148c7d2822f38..c7036c59bdacbe5a3d922d9894eacd562bd3aa48 100644 (file)
@@ -1,28 +1,7 @@
-/*
- *  Bacula memory pool routines.
- *
- *  The idea behind these routines is that there will be
- *  pools of memory that are pre-allocated for quick
- *  access. The pools will have a fixed memory size on allocation
- *  but if need be, the size can be increased. This is
- *  particularly useful for filename
- *  buffers where 256 bytes should be sufficient in 99.99%
- *  of the cases, but when it isn't we want to be able to
- *  increase the size.
- *
- *  A major advantage of the pool memory aside from the speed
- *  is that the buffer carrys around its size, so to ensure that
- *  there is enough memory, simply call the check_pool_memory_size()
- *  with the desired size and it will adjust only if necessary.
- *
- *           Kern E. Sibbald
- *
- *   Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ *  Bacula memory pool routines.
+ *
+ *  The idea behind these routines is that there will be
+ *  pools of memory that are pre-allocated for quick
+ *  access. The pools will have a fixed memory size on allocation
+ *  but if need be, the size can be increased. This is
+ *  particularly useful for filename
+ *  buffers where 256 bytes should be sufficient in 99.99%
+ *  of the cases, but when it isn't we want to be able to
+ *  increase the size.
+ *
+ *  A major advantage of the pool memory aside from the speed
+ *  is that the buffer carrys around its size, so to ensure that
+ *  there is enough memory, simply call the check_pool_memory_size()
+ *  with the desired size and it will adjust only if necessary.
+ *
+ *           Kern E. Sibbald
+ *
+ *   Version $Id$
+ */
 
 #include "bacula.h"
 
@@ -90,6 +90,7 @@ struct abufhead {
    int32_t ablen;                     /* Buffer length in bytes */
    int32_t pool;                      /* pool */
    struct abufhead *next;             /* pointer to next free buffer */
+   int32_t bnet_size;                 /* dummy for bnet_send() */
 };
 
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -457,8 +458,11 @@ void print_memory_pool_stats() {}
 int pm_strcat(POOLMEM **pm, const char *str)
 {
    int pmlen = strlen(*pm);
-   int len = strlen(str) + 1;
+   int len;
+
+   if (!str) str = "";
 
+   len = strlen(str) + 1;
    *pm = check_pool_memory_size(*pm, pmlen + len);
    memcpy(*pm+pmlen, str, len);
    return pmlen + len - 1;
@@ -467,8 +471,11 @@ int pm_strcat(POOLMEM **pm, const char *str)
 int pm_strcat(POOLMEM *&pm, const char *str)
 {
    int pmlen = strlen(pm);
-   int len = strlen(str) + 1;
+   int len;
 
+   if (!str) str = "";
+
+   len = strlen(str) + 1;
    pm = check_pool_memory_size(pm, pmlen + len);
    memcpy(pm+pmlen, str, len);
    return pmlen + len - 1;
@@ -488,8 +495,11 @@ int pm_strcat(POOLMEM *&pm, POOL_MEM &str)
 int pm_strcat(POOL_MEM &pm, const char *str)
 {
    int pmlen = strlen(pm.c_str());
-   int len = strlen(str) + 1;
+   int len;
+
+   if (!str) str = "";
 
+   len = strlen(str) + 1;
    pm.check_size(pmlen + len);
    memcpy(pm.c_str()+pmlen, str, len);
    return pmlen + len - 1;
@@ -502,8 +512,11 @@ int pm_strcat(POOL_MEM &pm, const char *str)
  */
 int pm_strcpy(POOLMEM **pm, const char *str)
 {
-   int len = strlen(str) + 1;
+   int len;
+
+   if (!str) str = "";
 
+   len = strlen(str) + 1;
    *pm = check_pool_memory_size(*pm, len);
    memcpy(*pm, str, len);
    return len - 1;
@@ -511,8 +524,11 @@ int pm_strcpy(POOLMEM **pm, const char *str)
 
 int pm_strcpy(POOLMEM *&pm, const char *str)
 {
-   int len = strlen(str) + 1;
+   int len;
 
+   if (!str) str = "";
+
+   len = strlen(str) + 1;
    pm = check_pool_memory_size(pm, len);
    memcpy(pm, str, len);
    return len - 1;
@@ -530,7 +546,11 @@ int pm_strcpy(POOLMEM *&pm, POOL_MEM &str)
 
 int pm_strcpy(POOL_MEM &pm, const char *str)
 {
-   int len = strlen(str) + 1;
+   int len;
+
+   if (!str) str = "";
+
+   len = strlen(str) + 1;
    pm.check_size(len);
    memcpy(pm.c_str(), str, len);
    return len - 1;
@@ -576,8 +596,11 @@ void POOL_MEM::realloc_pm(int32_t size)
 int POOL_MEM::strcat(const char *str)
 {
    int pmlen = strlen(mem);
-   int len = strlen(str) + 1;
+   int len;
 
+   if (!str) str = "";
+
+   len = strlen(str) + 1;
    check_size(pmlen + len);
    memcpy(mem+pmlen, str, len);
    return pmlen + len - 1;
@@ -586,7 +609,11 @@ int POOL_MEM::strcat(const char *str)
 
 int POOL_MEM::strcpy(const char *str)
 {
-   int len = strlen(str) + 1;
+   int len;
+
+   if (!str) str = "";
+
+   len = strlen(str) + 1;
    check_size(len);
    memcpy(mem, str, len);
    return len - 1;