__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 );
}
#include "vg_msg.h"
#include "vg_platform.h"
+#include "vg_string.h"
+#include <string.h>
+#include <stdio.h>
/* write a buffer from msg, rang checked. */
void vg_msg_wbuf( vg_msg *msg, u8 *buf, u32 len )
* 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 ) )
}
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;
}
}
/*
* 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 );