Commit 89d3c1b0 authored by Nils Goroll's avatar Nils Goroll
parent ca54552b
......@@ -26,7 +26,14 @@
* 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 */
#define cp_string(dst, src) \
......@@ -61,26 +68,28 @@ const struct vmod_priv null_blob[1] = {{ 0 }};
#define KIND_BLOB pointer
#define CP_BLOB(dst, src) \
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 || \
(src)->priv == NULL) { \
(src)->blob == NULL) { \
(dst) = null_blob; \
} else { \
d = malloc(sizeof *d); \
AN(d); \
d->priv = malloc((src)->len); \
AN(d->priv); \
memcpy(d->priv, (src)->priv, (src)->len); \
spc = malloc(sizeof *d + PRNDUP((src)->len)); \
AN(spc); \
d = (void *)spc; \
spc += sizeof *d; \
memcpy(spc, (src)->blob, (src)->len); \
d->blob = spc; \
d->len = (src)->len; \
d->free = free; \
(dst) = d; \
} \
} while(0)
#define FREE_BLOB(ptr) \
if ((ptr) != NULL && (ptr) != null_blob) { \
VRT_priv_fini(ptr); \
if ((ptr)->blob) \
free(TRUST_ME(ptr->blob)); \
free(TRUST_ME(ptr)); \
(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