mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-11 10:40:27 +09:00
buffer: Add ssh_buffer_allocate() function
Signed-off-by: Aris Adamantiadis <aris@0xbadc0de.be> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
0ad462102a
commit
36d52ee205
@@ -50,6 +50,7 @@ int ssh_buffer_add_u64(ssh_buffer buffer, uint64_t data);
|
|||||||
|
|
||||||
int ssh_buffer_validate_length(struct ssh_buffer_struct *buffer, size_t len);
|
int ssh_buffer_validate_length(struct ssh_buffer_struct *buffer, size_t len);
|
||||||
|
|
||||||
|
void *ssh_buffer_allocate(struct ssh_buffer_struct *buffer, uint32_t len);
|
||||||
int ssh_buffer_pack_va(struct ssh_buffer_struct *buffer,
|
int ssh_buffer_pack_va(struct ssh_buffer_struct *buffer,
|
||||||
const char *format,
|
const char *format,
|
||||||
int argc,
|
int argc,
|
||||||
|
|||||||
38
src/buffer.c
38
src/buffer.c
@@ -248,6 +248,44 @@ int ssh_buffer_add_data(struct ssh_buffer_struct *buffer, const void *data, uint
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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
|
* @internal
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user