From 587831e3bf3072828aa844c945fa61b523bd2529 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 26 Mar 2024 20:12:14 +0000 Subject: [PATCH] msg api, mem api --- vg_mem.c | 12 +++++------- vg_msg.c | 12 ++++++++++-- vg_msg.h | 4 ++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/vg_mem.c b/vg_mem.c index 7974079..0efd3ad 100644 --- a/vg_mem.c +++ b/vg_mem.c @@ -34,18 +34,16 @@ vg_linear_allocator *vg_linear_header( void *data ) __attribute__((warn_unused_result)) void *_vg_linear_alloc( void *buffer, u32 size, const char *constr_name ) { - if( size % 8 ){ - vg_error( "alloc(%u) is not 8 byte aligned\n", size ); - vg_print_backtrace(); + if( size % 8 ) size = vg_align8( size ); - } - if( ((u64)buffer) % 8 ){ + + if( ((u64)buffer) % 8 ) vg_fatal_error( "unaligned buffer (%p)", buffer ); - } vg_linear_allocator *alloc = vg_linear_header( buffer ); - if( (alloc->cur + size) > alloc->size ){ + if( (alloc->cur + size) > alloc->size ) + { vg_fatal_error( "linear allocator overflow (%u + %u > %u)\n", alloc->cur, size, alloc->size ); } diff --git a/vg_msg.c b/vg_msg.c index db7380a..65d8ebd 100644 --- a/vg_msg.c +++ b/vg_msg.c @@ -1,5 +1,8 @@ #include "vg_msg.h" #include "vg_platform.h" +#include "vg_string.h" +#include +#include /* write a buffer from msg, rang checked. */ void vg_msg_wbuf( vg_msg *msg, u8 *buf, u32 len ) @@ -383,7 +386,8 @@ int vg_msg_getkvcmd( vg_msg *msg, const char *key, vg_msg_cmd *cmd ) * Read a integral KV out to dst, and perform conversion if needed * dst is always defined, if its not found its set to 0 */ -int vg_msg_getkvintg( vg_msg *msg, const char *key, u8 type, void *dst ) +int vg_msg_getkvintg( vg_msg *msg, const char *key, u8 type, void *dst, + void *default_value ) { vg_msg_cmd cmd; if( vg_msg_getkvcmd( msg, key, &cmd ) ) @@ -393,7 +397,11 @@ int vg_msg_getkvintg( vg_msg *msg, const char *key, u8 type, void *dst ) } else { - memset( dst, 0, vg_msg_cmd_bytecount(type) ); + if( default_value ) + memcpy( dst, default_value, vg_msg_cmd_bytecount(type) ); + else + memset( dst, 0, vg_msg_cmd_bytecount(type) ); + return 0; } } diff --git a/vg_msg.h b/vg_msg.h index 91f0dc2..0b13024 100644 --- a/vg_msg.h +++ b/vg_msg.h @@ -188,9 +188,9 @@ int vg_msg_getkvcmd( vg_msg *msg, const char *key, vg_msg_cmd *cmd ); /* * Read a integral KV out to dst, and perform conversion if needed - * dst is always defined, if its not found its set to 0 */ -int vg_msg_getkvintg( vg_msg *msg, const char *key, u8 type, void *dst ); +int vg_msg_getkvintg( vg_msg *msg, const char *key, u8 type, void *dst, + void *default_value ); /* helper for reading string kvs. returns NULL if not found */ const char *vg_msg_getkvstr( vg_msg *msg, const char *key ); -- 2.25.1