aboutsummaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 7001eef0..5859e926 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -251,6 +251,44 @@ int ssh_buffer_add_data(struct ssh_buffer_struct *buffer, const void *data, uint
/**
* @internal
*
+ * @brief Allocate space for data at the tail of a buffer.
+ *
+ * @param[in] buffer The buffer to add the data.
+ *
+ * @param[in] len The length of the data to add.
+ *
+ * @return Pointer on the allocated space
+ * NULL on error.
+ */
+void *ssh_buffer_allocate(struct ssh_buffer_struct *buffer, uint32_t len)
+{
+ void *ptr;
+ buffer_verify(buffer);
+
+ if (buffer->used + len < len) {
+ return NULL;
+ }
+
+ if (buffer->allocated < (buffer->used + len)) {
+ if (buffer->pos > 0) {
+ buffer_shift(buffer);
+ }
+
+ if (realloc_buffer(buffer, buffer->used + len) < 0) {
+ return NULL;
+ }
+ }
+
+ ptr = buffer->data + buffer->used;
+ buffer->used+=len;
+ buffer_verify(buffer);
+
+ return ptr;
+}
+
+/**
+ * @internal
+ *
* @brief Add a SSH string to the tail of a buffer.
*
* @param[in] buffer The buffer to add the string.