static int lex_init(lex_t *lex, get_func get, void *data) { stream_init(&lex->stream, get, data); if(strbuffer_init(&lex->saved_text)) return -1; lex->token = TOKEN_INVALID; return 0; }
void node_send_json(json_t *array) { strbuffer_t strbuff; int rv = strbuffer_init(&strbuff); assert(rv == 0); if (0 == json_dump_callback(array, dump_to_strbuffer, (void *)&strbuff, 0)) { strbuffer_append(&strbuff, "\n"); node_send_raw(strbuffer_value(&strbuff)); } strbuffer_close(&strbuff); json_decref(array); }
static char *bdumps(json_t *json, char **end) { strbuffer_t strbuff; if (strbuffer_init(&strbuff)) { return NULL; } if (w_bser_dump(json, dump_to_strbuffer, &strbuff) == 0) { *end = strbuff.value + strbuff.length; return strbuff.value; } strbuffer_close(&strbuff); return NULL; }
strbuffer_t * json_token_tostr(char *js, jsmntok_t *t) { if(t->start > strlen(js) || t->end > strlen(js) || t->end > strlen(js) || (t->end - t->start) > strlen(js) ) { return NULL; } strbuffer_t *string = (strbuffer_t *) json_malloc(sizeof(strbuffer_t)); strbuffer_init(string); strbuffer_append_bytes(string, js + t->start, (t->end - t->start) ); return string; }
json_error_t* parsingError( json_error_code_t errCode, char* errMsg, jsmntok_t *token, char* jsonString ) { json_error_t* err = (json_error_t*) json_malloc(sizeof(json_error_t)); err->errorMsg = (strbuffer_t*) json_malloc(sizeof(json_error_t)); strbuffer_init(err->errorMsg); err->errorCode = errCode; strbuffer_append(err->errorMsg, errMsg); if( token != NULL && jsonString != NULL) { strbuffer_t *tokenText = json_token_tostr(jsonString, token); strbuffer_append(err->errorMsg, " Error was in: "); strbuffer_append(err->errorMsg, tokenText->value); strbuffer_destroy(tokenText); } return err; }
char *strbuffer_steal_value(strbuffer_t *strbuff) { char *result = strbuff->value; strbuffer_init(strbuff); return result; }