X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=vdf.h;h=892b65d5f304386a0efa532888e14c79398c20ca;hp=ddfc2d34300cc87751183c45dc64bec543439a95;hb=1bdd02062cda9b107c4d66586d3c036ea15f6ae2;hpb=a97099abba0a239e20929f04ece9d6839c96ac14 diff --git a/vdf.h b/vdf.h index ddfc2d3..892b65d 100644 --- a/vdf.h +++ b/vdf.h @@ -1,12 +1,12 @@ #define vdf_foreach( NODE, STR, AS ) \ -int __vdf_it_##__LINE__ = 0; \ +int __vdf_it_##AS = 0; \ vdf_node * AS;\ -while( (AS = vdf_next( NODE, STR, &__vdf_it_##__LINE__ )) ) +while( (AS = vdf_next( NODE, STR, &__vdf_it_##AS )) ) #define kv_foreach( NODE, STR, AS ) \ -int __kv_it_##__LINE__ = 0; \ +int __kv_it_##AS = 0; \ const char * AS;\ -while( (AS = kv_iter( NODE, STR, &__kv_it_##__LINE__ )) ) +while( (AS = kv_iter( NODE, STR, &__kv_it_##AS )) ) #include #include @@ -103,6 +103,9 @@ struct vdf_node vdf_node **nodes; vdf_kv *pairs; + + u32 user; + u32 user1; }; vdf_node *vdf_next( vdf_node *node, const char *name, int *it ) @@ -112,7 +115,7 @@ vdf_node *vdf_next( vdf_node *node, const char *name, int *it ) for( int i = it? *it: 0; i < csr_sb_count( node->nodes ); i ++ ) { - if( !strcmp( name, node->nodes[i]->name )) + if( !name || !strcmp( name, node->nodes[i]->name )) { if( it ) *it = i+1; return node->nodes[i]; @@ -534,24 +537,38 @@ void vdf_parse_feedbuffer( vdf_ctx *ctx, char *buf ) } } -vdf_node *vdf_open_file( const char *fn ) -{ +int vdf_load_into( const char *fn, vdf_node *node ) +{ char *text_src = csr_textasset_read( fn ); if( !text_src ) { fprintf( stderr, "vdf open failed\n" ); - return NULL; + return 0; } vdf_ctx ctx = {0}; - ctx.root = ctx.st.pnode = vdf_create_node( NULL, NULL ); + ctx.root = ctx.st.pnode = node; vdf_newln( &ctx ); vdf_parse_feedbuffer( &ctx, text_src ); - free( text_src ); - return ctx.root; + + return 1; +} + +vdf_node *vdf_open_file( const char *fn ) +{ + vdf_node *root = vdf_create_node( NULL, NULL ); + if( vdf_load_into( fn, root ) ) + { + return root; + } + else + { + vdf_free_r( root ); + return NULL; + } } // OUTPUT