Diff for /libelwix/src/json.c between versions 1.4.6.2 and 1.4.6.3

version 1.4.6.2, 2018/04/16 15:54:17 version 1.4.6.3, 2018/04/18 14:55:45
Line 505  json_token2dbl(const char *jstr, jtok_t * __restrict t Line 505  json_token2dbl(const char *jstr, jtok_t * __restrict t
 }  }
   
 /*  /*
 * json_findbykey() - Find data by key * json_findbykey() - Find token data by key
  *   *
  * @jstr = JSON string   * @jstr = JSON string
  * @key = Search key   * @key = Search key
Line 546  json_findbykey(const char *jstr, const char *key, jtyp Line 546  json_findbykey(const char *jstr, const char *key, jtyp
 }  }
   
 /*  /*
    * json_findbypos() - Find token by position on JSON string
    *
    * @pos = Offset from begin of JSON string
    * @toks = Parsed tokens
    * @toksnum = Number of parsed tokens
    * return: =NULL error or !=NULL token found 
    */
   jtok_t *
   json_findbypos(u_long pos, jtok_t * __restrict toks, int toksnum)
   {
           jtok_t *tok = NULL;
           register int i;
   
           if (toks)
                   return NULL;
   
           for (i = 1; i < toksnum; i++)
                   if (pos <= toks[i].tok_end && pos >= toks[i].tok_start) {
                           tok = toks + i;
                           break;
                   }
   
           return tok;
   }
   
   /*
  * json_token2array() - Convert token to string array   * json_token2array() - Convert token to string array
  *   *
  * @jstr = JSON string   * @jstr = JSON string
Line 557  array_t * Line 583  array_t *
 json_token2array(const char *jstr, jtok_t * __restrict tok)  json_token2array(const char *jstr, jtok_t * __restrict tok)
 {  {
         array_t *arr = NULL;          array_t *arr = NULL;
        register int i;        register int i, j;
         int siz;          int siz;
         ait_val_t *v;          ait_val_t *v;
         jtok_t *t;          jtok_t *t;
Line 578  json_token2array(const char *jstr, jtok_t * __restrict Line 604  json_token2array(const char *jstr, jtok_t * __restrict
                 AIT_SET_STRSIZ(v, json_toklen(tok) + 1);                  AIT_SET_STRSIZ(v, json_toklen(tok) + 1);
                 json_tokstrcpy(AIT_GET_STR(v), jstr, tok);                  json_tokstrcpy(AIT_GET_STR(v), jstr, tok);
         } else if (tok->tok_type == J_ARRAY) {          } else if (tok->tok_type == J_ARRAY) {
                for (i = 0; i < tok->tok_size; i++) {                for (i = 0, j = 1; i < tok->tok_size; i++) {
                        t = &tok[i + 1];                        t = &tok[i + j];
                         v = ait_getVars(&arr, i);                          v = ait_getVars(&arr, i);
                         AIT_SET_STRSIZ(v, json_toklen(t) + 1);                          AIT_SET_STRSIZ(v, json_toklen(t) + 1);
                         json_tokstrcpy(AIT_GET_STR(v), jstr, t);                          json_tokstrcpy(AIT_GET_STR(v), jstr, t);
   
                           /* if there we have array from objects should parse all object tokens */
                           while (i < tok->tok_size - 1 && tok->tok_idx != tok[i + j + 1].tok_parent)
                                   j++;
                 }                  }
         } else if (tok->tok_type == J_OBJECT) {          } else if (tok->tok_type == J_OBJECT) {
                 for (i = 0; tok->tok_idx <= tok[i + 1].tok_parent; i++) {                  for (i = 0; tok->tok_idx <= tok[i + 1].tok_parent; i++) {
Line 1056  json_dump_yaml(FILE *f, const char *jstr, jtok_t *toks Line 1086  json_dump_yaml(FILE *f, const char *jstr, jtok_t *toks
                                 fprintf(f, "  ");                                  fprintf(f, "  ");
                         fprintf(f, "   - ");                          fprintf(f, "   - ");
                         j += json_dump_yaml(f, jstr, toks + j + 1, toksnum - j, indent + 1);                          j += json_dump_yaml(f, jstr, toks + j + 1, toksnum - j, indent + 1);
                           fprintf(f, "\n");
                   }
                   return j + 1;
           }
   
           return 0;
   }
   
   /*
    * json_dump() - Dump parsed JSON string to structure format
    *
    * @f = Output handler
    * @jstr = JSON string
    * @toks = JSON tokens
    * @toksnum = Number of tokens
    * @indent = Start indent spaces
    * return: 0 done and 1 added one more item
    */
   int
   json_dump(FILE *f, const char *jstr, jtok_t *toks, int toksnum, int indent)
   {
           register int i, j, k;
   
           if (!toksnum)
                   return 0;
   
           if (toks->tok_type == J_VALUE) {
                   fprintf(f, "[idx=%ld type=VALUE start=%ld end=%ld size=%ld parent=%ld] = %.*s", 
                                   toks->tok_idx, toks->tok_start, toks->tok_end, toks->tok_size, toks->tok_parent, 
                                   (int) json_toklen(toks), json_tokstr(jstr, toks));
                   return 1;
           } else if (toks->tok_type == J_STRING) {
                   fprintf(f, "[idx=%ld type=STRING start=%ld end=%ld size=%ld parent=%ld] = %.*s", 
                                   toks->tok_idx, toks->tok_start, toks->tok_end, toks->tok_size, toks->tok_parent, 
                                   (int) json_toklen(toks), json_tokstr(jstr, toks));
                   return 1;
           } else if (toks->tok_type == J_OBJECT) {
                   fprintf(f, "\n");
                   fprintf(f, "object:: [idx=%ld type=OBJECT start=%ld end=%ld size=%ld parent=%ld]\n", 
                                   toks->tok_idx, toks->tok_start, toks->tok_end, toks->tok_size, toks->tok_parent);
                   for (j = i = 0; i < json_toksize(toks); i++) {
                           for (k = 0; k < indent; k++)
                                   fprintf(f, "  ");
                           j += json_dump(f, jstr, toks + j + 1, toksnum - j, indent + 1);
                           fprintf(f, ": ");
                           j += json_dump(f, jstr, toks + j + 1, toksnum - j, indent + 1);
                           fprintf(f, "\n");
                   }
                   return j + 1;
           } else if (toks->tok_type == J_ARRAY) {
                   fprintf(f, "\n");
                   fprintf(f, "array[] [idx=%ld type=ARRAY start=%ld end=%ld size=%ld parent=%ld]", 
                                   toks->tok_idx, toks->tok_start, toks->tok_end, toks->tok_size, toks->tok_parent);
                   for (j = i = 0; i < json_toksize(toks); i++) {
                           for (k = 0; k < indent - 1; k++)
                                   fprintf(f, "  ");
                           j += json_dump(f, jstr, toks + j + 1, toksnum - j, indent + 1);
                         fprintf(f, "\n");                          fprintf(f, "\n");
                 }                  }
                 return j + 1;                  return j + 1;

Removed from v.1.4.6.2  
changed lines
  Added in v.1.4.6.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>