From: Willy Tarreau Date: Thu, 27 Jul 2017 11:35:34 +0000 (+0200) Subject: MINOR: chunks: add chunk_memcpy() and chunk_memcat() X-Git-Tag: v1.8-dev3~173 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82032f12236b5d1cb7c7a3196193bf869ba57096;p=thirdparty%2Fhaproxy.git MINOR: chunks: add chunk_memcpy() and chunk_memcat() These two functions respectively copy a memory area onto the chunk, and append the contents of a memory area over a chunk. They are convenient to prepare binary output data to be sent and will be used for HTTP/2. --- diff --git a/include/common/chunk.h b/include/common/chunk.h index 8c067f7daf..1f89e9bf21 100644 --- a/include/common/chunk.h +++ b/include/common/chunk.h @@ -98,6 +98,33 @@ static inline void chunk_initstr(struct chunk *chk, const char *str) chk->size = 0; /* mark it read-only */ } +/* copies memory area into for bytes. Returns 0 in + * case of failure. No trailing zero is added. + */ +static inline int chunk_memcpy(struct chunk *chk, const char *src, size_t len) +{ + if (unlikely(len >= chk->size)) + return 0; + + chk->len = len; + memcpy(chk->str, src, len); + + return 1; +} + +/* appends memory area after for bytes. Returns 0 in + * case of failure. No trailing zero is added. + */ +static inline int chunk_memcat(struct chunk *chk, const char *src, size_t len) +{ + if (unlikely(chk->len < 0 || chk->len + len >= chk->size)) + return 0; + + memcpy(chk->str + chk->len, src, len); + chk->len += len; + return 1; +} + /* copies str into followed by a trailing zero. Returns 0 in * case of failure. */