]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Add helpers for POOL_MEM objects
authorRadoslaw Korzeniewski <radekk@inteos.pl>
Wed, 17 Jun 2020 09:42:24 +0000 (11:42 +0200)
committerEric Bollengier <eric@baculasystems.com>
Tue, 1 Mar 2022 14:36:16 +0000 (15:36 +0100)
bacula/src/lib/mem_pool.h

index bb261adbf33931f14e3658834028376442f238a0..aafc1b08f6c734be8dcac4f9c7fea02fc81ab775 100644 (file)
@@ -78,11 +78,29 @@ extern void garbage_collect_memory();
 #define PM_BSOCK   5                  /* BSOCK buffer */
 #define PM_MAX     PM_BSOCK           /* Number of types */
 
+int pm_strcat(POOLMEM **pm, const char *str);
+int pm_strcat(POOLMEM *&pm, const char *str);
+int pm_strcat(POOL_MEM &pm, const char *str);
+int pm_strcat(POOLMEM *&pm, POOL_MEM &str);
+int pm_strcat(POOL_MEM &pm, POOL_MEM &str);
+
+int pm_strcpy(POOLMEM **pm, const char *str);
+int pm_strcpy(POOLMEM *&pm, const char *str);
+int pm_strcpy(POOL_MEM &pm, const char *str);
+int pm_strcpy(POOLMEM *&pm, POOL_MEM &str);
+
+int pm_memcpy(POOLMEM **pm, const char *data, int32_t n);
+int pm_memcpy(POOLMEM *&pm, const char *data, int32_t n);
+int pm_memcpy(POOL_MEM &pm, const char *data, int32_t n);
+int pm_memcpy(POOLMEM *&pm, POOL_MEM &data, int32_t n);
+
 class POOL_MEM {
    char *mem;
 public:
    POOL_MEM() { mem = get_pool_memory(PM_NAME); *mem = 0; }
    POOL_MEM(int pool) { mem = get_pool_memory(pool); *mem = 0; }
+   POOL_MEM(POOL_MEM &pm) : mem(get_pool_memory(PM_NAME)) { check_size(pm.size()); memcpy(mem, pm.mem, size()); };
+   POOL_MEM(const char * str) : mem(get_pool_memory(PM_NAME)) { pm_strcpy(*this, str); };
    ~POOL_MEM() { free_pool_memory(mem); mem = NULL; }
    char *c_str() const { return mem; }
    POOLMEM *&addr() { return mem; }
@@ -96,22 +114,9 @@ public:
    void realloc_pm(int32_t size);
    int strcpy(const char *str);
    int strcat(const char *str);
+   /* Copy operator with reference and pointers */
+   POOL_MEM &operator=(POOL_MEM &pm) { pm_memcpy(*this, pm.mem, pm.size()); return *this; };
+   POOL_MEM &operator=(POOL_MEM *pm) { pm_memcpy(*this, pm->mem, pm->size()); return *this; };
 };
 
-int pm_strcat(POOLMEM **pm, const char *str);
-int pm_strcat(POOLMEM *&pm, const char *str);
-int pm_strcat(POOL_MEM &pm, const char *str);
-int pm_strcat(POOLMEM *&pm, POOL_MEM &str);
-int pm_strcat(POOL_MEM &pm, POOL_MEM &str);
-
-int pm_strcpy(POOLMEM **pm, const char *str);
-int pm_strcpy(POOLMEM *&pm, const char *str);
-int pm_strcpy(POOL_MEM &pm, const char *str);
-int pm_strcpy(POOLMEM *&pm, POOL_MEM &str);
-
-int pm_memcpy(POOLMEM **pm, const char *data, int32_t n);
-int pm_memcpy(POOLMEM *&pm, const char *data, int32_t n);
-int pm_memcpy(POOL_MEM &pm, const char *data, int32_t n);
-int pm_memcpy(POOLMEM *&pm, POOL_MEM &data, int32_t n);
-
 #endif