From: Heng Li Date: Sat, 29 Nov 2014 23:55:36 +0000 (-0500) Subject: a bit code cleaup X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=faddac8895d62867ab8c3554d67e58cc9942df87;p=klib.git a bit code cleaup --- diff --git a/kson.c b/kson.c index 5344fe7..e0e61cf 100644 --- a/kson.c +++ b/kson.c @@ -119,6 +119,40 @@ kson_t *kson_parse(const char *json, int *error) return kson; } +const kson_node_t *kson_vquery(const kson_node_t *nodes, const kson_node_t *root, int depth, va_list ap) +{ + const kson_node_t *p = root; + while (p && depth > 0) { + if (p->type == KSON_TYPE_BRACE) { + long i; + const char *q = va_arg(ap, const char*); + for (i = 0; i < (long)p->n; ++i) { + const kson_node_t *r = &nodes[i]; + if (r->key && strcmp(r->key, q) == 0) { + p = r; + break; + } + } + if (i == (long)p->n) p = 0; + } else if (p->type == KSON_TYPE_BRACKET) { + long i = va_arg(ap, long); + p = i < (long)p->n? &nodes[p->v.child[i]] : 0; + } else break; + --depth; + } + return p; +} + +const kson_node_t *kson_query(const kson_t *kson, int depth, ...) +{ + const kson_node_t *p; + va_list ap; + va_start(ap, depth); + p = kson_vquery(kson->nodes, kson->nodes, depth, ap); + va_end(ap); + return p; +} + void kson_format_recur(const kson_node_t *nodes, int depth, const kson_node_t *p) { long i; @@ -146,7 +180,7 @@ void kson_format_recur(const kson_node_t *nodes, int depth, const kson_node_t *p } else { if (p->type != KSON_TYPE_NO_QUOTE) putchar(p->type == KSON_TYPE_SGL_QUOTE? '\'' : '"'); - printf("%s", p->v.str); + fputs(p->v.str, stdout); if (p->type != KSON_TYPE_NO_QUOTE) putchar(p->type == KSON_TYPE_SGL_QUOTE? '\'' : '"'); } @@ -158,40 +192,6 @@ void kson_format(const kson_t *kson) putchar('\n'); } -const kson_node_t *kson_vquery(const kson_node_t *nodes, const kson_node_t *root, int depth, va_list ap) -{ - const kson_node_t *p = root; - while (p && depth > 0) { - if (p->type == KSON_TYPE_BRACE) { - long i; - const char *q = va_arg(ap, const char*); - for (i = 0; i < (long)p->n; ++i) { - const kson_node_t *r = &nodes[i]; - if (r->key && strcmp(r->key, q) == 0) { - p = r; - break; - } - } - if (i == (long)p->n) p = 0; - } else if (p->type == KSON_TYPE_BRACKET) { - long i = va_arg(ap, long); - p = i < (long)p->n? &nodes[p->v.child[i]] : 0; - } else break; - --depth; - } - return p; -} - -const kson_node_t *kson_query(const kson_t *kson, int depth, ...) -{ - const kson_node_t *p; - va_list ap; - va_start(ap, depth); - p = kson_vquery(kson->nodes, kson->nodes, depth, ap); - va_end(ap); - return p; -} - #ifdef KSON_MAIN #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) int main(int argc, char *argv[])