Shows usage with and without the convenience functions, given data like the following:
{ uid => 12, skey => "ajshdfkh", svc => "AUS", method => "NULL", op => "AUTH" }
#include <stdlib.h> #include <stdio.h> #include "sedabl.h" int main() { int uid=12; char *skey = "ajshdfkh"; char *svc = "AUS"; char *method = "NULL"; char *op = "AUTH"; sedabl_block *lb; sedabl_val *v; void *p; long len; printf("creating listblock\n"); lb = sedabl_new_listblock("outer",NULL); printf("\tadding uid (%d)\n",uid); p=malloc(256); len=snprintf(p,256,"%d",uid); v=sedabl_new_val(p,len); free(p); sedabl_add_val(lb,"uid",v); printf("\tadding skey (%s)\n",skey); v=sedabl_new_val(skey,strlen(skey)); sedabl_add_val(lb,"skey",v); printf("\tadding svc (%s)\n",svc); v=sedabl_new_val(svc,strlen(svc)); sedabl_add_val(lb,"svc",v); printf("\tadding method (%s)\n",method); v=sedabl_new_val(method,strlen(method)); sedabl_add_val(lb,"method",v); printf("\tadding op (%s)\n",op); v=sedabl_new_val(op,strlen(op)); sedabl_add_val(lb,"op",v); printf("\tdemarshalling\n"); v=sedabl_demarshal(lb); sedabl_free(lb); printf("v->val now points to a v->len-sized block of core\n"); printf("which can, eg, be written to a file or socket\n\n"); /* -- LATER -- */ printf("marshalling\n"); lb=sedabl_marshal(v); if (lb == (sedabl_block *)-1) { fprintf(stderr,"Incomplete block during round trip!\n"); exit(1); } if (!lb) { fprintf(stderr,"Invalid byte string during round trip!\n"); exit(1); } free(v->val); free(v); v=sedabl_get_val(lb,"uid",-1); skey=malloc(v->len+1); strncpy(skey,v->val,v->len); skey[v->len]='\0'; uid=atol(skey); free(skey); printf("\tgot uid (%d)\n",uid); v=sedabl_get_val(lb,"skey",-1); skey=malloc(v->len+1); strncpy(skey,v->val,v->len); skey[v->len]='\0'; printf("\tgot skey (%s)\n",skey); v=sedabl_get_val(lb,"svc",-1); svc=malloc(v->len+1); strncpy(svc,v->val,v->len); svc[v->len]='\0'; printf("\tgot svc (%s)\n",svc); v=sedabl_get_val(lb,"method",-1); method=malloc(v->len+1); strncpy(method,v->val,v->len); method[v->len]='\0'; printf("\tgot method (%s)\n",method); v=sedabl_get_val(lb,"op",-1); op=malloc(v->len+1); strncpy(op,v->val,v->len); op[v->len]='\0'; printf("\tgot op (%s)\n",op); sedabl_free(lb); /***********************************************/ fprintf(stderr,"\n\n*** Now, using the convenience functions...\n\n\n"); /***********************************************/ printf("creating listblock\n"); lb = sedabl_new_listblock("outer",NULL); printf("\tadding uid (%d)\n",uid); sedabl_add_int(lb,"uid",uid); printf("\tadding skey (%s)\n",skey); sedabl_add_str(lb,"skey",skey); printf("\tadding svc (%s)\n",svc); sedabl_add_str(lb,"svc",svc); printf("\tadding method (%s)\n",method); sedabl_add_str(lb,"method",method); printf("\tadding op (%s)\n",op); sedabl_add_str(lb,"op",op); printf("\tdemarshalling\n"); v=sedabl_demarshal(lb); sedabl_free(lb); printf("v->val now points to a v->len-sized block of core\n"); printf("which can, eg, be written to a file or socket\n\n"); /* -- LATER -- */ printf("marshalling\n"); lb=sedabl_marshal(v); if (lb == (sedabl_block *)-1) { fprintf(stderr,"Incomplete block during round trip!\n"); exit(1); } if (!lb) { fprintf(stderr,"Invalid byte string during round trip!\n"); exit(1); } uid=sedabl_get_int(lb,"uid",-1); printf("\tgot uid (%d)\n",uid); skey=sedabl_get_str(lb,"skey",-1); printf("\tgotskey (%s)\n",skey); svc=sedabl_get_str(lb,"svc",-1); printf("\tgot svc (%s)\n",svc); method=sedabl_get_str(lb,"method",-1); printf("\tgot method (%s)\n",method); op=sedabl_get_str(lb,"op",-1); printf("\tgot op (%s)\n",op); sedabl_free(lb); }