Commit 89d3c1b0 authored by Nils Goroll's avatar Nils Goroll
parent ca54552b
...@@ -26,7 +26,14 @@ ...@@ -26,7 +26,14 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
const struct vmod_priv null_blob[1] = {{ 0 }}; static char empty[1] = { '\0' };
static const struct vrt_blob null_blob[1] = {{
#define VMOD_OBJVAR_NULL_TYPE 0xfade40b1
.type = VMOD_OBJVAR_NULL_TYPE,
.len = 0,
.blob = empty,
}};
/* based upon REPLACE() from miniobj.h */ /* based upon REPLACE() from miniobj.h */
#define cp_string(dst, src) \ #define cp_string(dst, src) \
...@@ -61,26 +68,28 @@ const struct vmod_priv null_blob[1] = {{ 0 }}; ...@@ -61,26 +68,28 @@ const struct vmod_priv null_blob[1] = {{ 0 }};
#define KIND_BLOB pointer #define KIND_BLOB pointer
#define CP_BLOB(dst, src) \ #define CP_BLOB(dst, src) \
do { \ do { \
struct vmod_priv *d; \ unsigned char *spc; \
struct vrt_blob *d = TRUST_ME(dst); \
\ \
FREE_BLOB(dst); \ FREE_BLOB(d); \
if ((src) == NULL || (src)->len == 0 || \ if ((src) == NULL || (src)->len == 0 || \
(src)->priv == NULL) { \ (src)->blob == NULL) { \
(dst) = null_blob; \ (dst) = null_blob; \
} else { \ } else { \
d = malloc(sizeof *d); \ spc = malloc(sizeof *d + PRNDUP((src)->len)); \
AN(d); \ AN(spc); \
d->priv = malloc((src)->len); \ d = (void *)spc; \
AN(d->priv); \ spc += sizeof *d; \
memcpy(d->priv, (src)->priv, (src)->len); \ memcpy(spc, (src)->blob, (src)->len); \
d->blob = spc; \
d->len = (src)->len; \ d->len = (src)->len; \
d->free = free; \
(dst) = d; \ (dst) = d; \
} \ } \
} while(0) } while(0)
#define FREE_BLOB(ptr) \ #define FREE_BLOB(ptr) \
if ((ptr) != NULL && (ptr) != null_blob) { \ if ((ptr) != NULL && (ptr) != null_blob) { \
VRT_priv_fini(ptr); \ if ((ptr)->blob) \
free(TRUST_ME(ptr->blob)); \
free(TRUST_ME(ptr)); \ free(TRUST_ME(ptr)); \
(ptr) = NULL; \ (ptr) = NULL; \
} \ } \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment