summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-05-21 14:32:34 +0800
committerIru Cai <mytbk920423@gmail.com>2018-05-21 16:45:38 +0800
commitb44293b115bbe69033ab9c066d301e1f7aaf64cf (patch)
tree51a8f7474b5621b25b459513b1444e96dd279242
parent9f00a9265c05dc02ad1b1e4c8148e1950c394530 (diff)
downloadfqterm-b44293b115bbe69033ab9c066d301e1f7aaf64cf.tar.xz
buffer_append: support NULL argument s to just allocate the space
-rw-r--r--src/protocol/internal/buffer.c3
-rw-r--r--src/protocol/internal/buffer.h3
2 files changed, 5 insertions, 1 deletions
diff --git a/src/protocol/internal/buffer.c b/src/protocol/internal/buffer.c
index f75d33e..dc53781 100644
--- a/src/protocol/internal/buffer.c
+++ b/src/protocol/internal/buffer.c
@@ -51,7 +51,8 @@ static int ensure(buffer *b, size_t len)
int buffer_append(buffer *b, const uint8_t *s, size_t len)
{
if (ensure(b, len)) {
- memcpy(b->p + b->offs + b->sz, s, len);
+ if (s != NULL)
+ memcpy(b->p + b->offs + b->sz, s, len);
b->sz += len;
return 1;
} else {
diff --git a/src/protocol/internal/buffer.h b/src/protocol/internal/buffer.h
index 0e0b635..0cfdca6 100644
--- a/src/protocol/internal/buffer.h
+++ b/src/protocol/internal/buffer.h
@@ -44,6 +44,9 @@ static inline void buffer_clear(buffer *b) { b->offs = b->sz = 0; }
static inline void buffer_deinit(buffer *b) { free(b->p); }
static inline uint8_t *buffer_data(buffer *b) { return b->p + b->offs; }
static inline size_t buffer_len(buffer *b) { return b->sz; }
+/* buffer_append: append data in s to buffer b,
+ * if s is NULL, then just allocate len bytes of space in b
+ */
int buffer_append(buffer *b, const uint8_t *s, size_t len);
int buffer_append_string(buffer *b, const char *s, size_t len);
int buffer_append_byte(buffer *b, uint8_t);