static js_Property *jdelete(js_State *J, js_Object *obj, js_Property *node, const char *name) { js_Property *temp, *succ; if (node != &sentinel) { int c = strcmp(name, node->name); if (c < 0) { node->left = jdelete(J, obj, node->left, name); } else if (c > 0) { node->right = jdelete(J, obj, node->right, name); } else { if (node->left == &sentinel) { temp = node; node = node->right; freeproperty(J, obj, temp); } else if (node->right == &sentinel) { temp = node; node = node->left; freeproperty(J, obj, temp); } else { succ = node->right; while (succ->left != &sentinel) succ = succ->left; node->name = succ->name; node->atts = succ->atts; node->value = succ->value; node->right = jdelete(J, obj, node->right, succ->name); } } if (node->left->level < node->level - 1 || node->right->level < node->level - 1) { if (node->right->level > --node->level) node->right->level = node->level; node = skew(node); node->right = skew(node->right); node->right->right = skew(node->right->right); node = split(node); node->right = split(node->right); } } return node; }
char *basilisk_addhexstr(char **ptrp,cJSON *valsobj,char *strbuf,int32_t strsize,uint8_t *data,int32_t datalen) { *ptrp = 0; if ( data != 0 && datalen > 0 ) { if ( valsobj != 0 && jobj(valsobj,"data") != 0 ) { printf("basilisk_addhexstr warning: already have data object\n"); jdelete(valsobj,"data"); } if ( (datalen<<1)+1 > strsize ) { strbuf = calloc(1,(datalen << 1) + 1); *ptrp = (void *)strbuf; } init_hexbytes_noT(strbuf,data,datalen); if ( valsobj != 0 ) jaddstr(valsobj,"data",strbuf); } else return(0); return(strbuf); }
char *SuperNET_processJSON(struct supernet_info *myinfo,cJSON *json,char *remoteaddr) { cJSON *retjson; uint64_t tag; uint32_t timeout; char *jsonstr,*method,*retjsonstr,*retstr = 0; //char str[65]; printf("processJSON %p %s\n",&myinfo->privkey,bits256_str(str,myinfo->privkey)); if ( json != 0 ) { if ( (tag= j64bits(json,"tag")) == 0 ) { OS_randombytes((uint8_t *)&tag,sizeof(tag)); jadd64bits(json,"tag",tag); } if ( (timeout= juint(json,"timeout")) == 0 ) timeout = IGUANA_JSONTIMEOUT; if ( (method= jstr(json,"method")) != 0 && strcmp(method,"DHT") == 0 && remoteaddr != 0 ) { SuperNET_hexmsgprocess(myinfo,0,json,jstr(json,"hexmsg"),remoteaddr); return(clonestr("{\"result\":\"processed remote DHT\"}")); } jsonstr = jprint(json,0); if ( remoteaddr == 0 || jstr(json,"immediate") != 0 ) retjsonstr = SuperNET_jsonstr(myinfo,jsonstr,remoteaddr); else retjsonstr = iguana_blockingjsonstr(myinfo,jsonstr,tag,timeout,remoteaddr); if ( retjsonstr != 0 ) { if ( (retjson= cJSON_Parse(retjsonstr)) != 0 ) { jdelete(retjson,"tag"); jadd64bits(retjson,"tag",tag); retstr = jprint(retjson,1); //printf("retstr.(%s) retjsonstr.%p retjson.%p\n",retstr,retjsonstr,retjson); free(retjsonstr);//,strlen(retjsonstr)+1); } else retstr = retjsonstr; } free(jsonstr); } else retstr = clonestr("{\"error\":\"cant parse JSON\"}"); if ( retstr == 0 ) retstr = clonestr("{\"error\":\"null return\"}"); return(retstr); }
kill_rgb_files() { int i; for (i=0;i<3;i++) jdelete(rgb_names[i]); }
void jsV_delproperty(js_State *J, js_Object *obj, const char *name) { obj->properties = jdelete(J, obj, obj->properties, name); }