Diff for /libelwix/src/json.c between versions 1.1.2.11 and 1.4.6.1

version 1.1.2.11, 2017/11/30 13:45:38 version 1.4.6.1, 2018/04/16 14:02:35
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2017Copyright 2004 - 2018
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 437  json_token2val(const char *jstr, jtok_t * __restrict t Line 437  json_token2val(const char *jstr, jtok_t * __restrict t
  *   *
  * @jstr = JSON string   * @jstr = JSON string
  * @tok = Token for convert   * @tok = Token for convert
 * @return =NULL error or !=NULL allocated str, after use should be e_free() * @return =NULL error or !=NULL allocated str, after use should be json_freestr()|e_free()
  */   */
 char *  char *
 json_token2str(const char *jstr, jtok_t * __restrict tok)  json_token2str(const char *jstr, jtok_t * __restrict tok)
Line 483  json_token2num(const char *jstr, jtok_t * __restrict t Line 483  json_token2num(const char *jstr, jtok_t * __restrict t
 }  }
   
 /*  /*
    * json_token2dbl() - Return token to double
    *
    * @jstr = JSON string
    * @tok = Token for convert
    * @return number
    */
   double
   json_token2dbl(const char *jstr, jtok_t * __restrict tok)
   {
           long ret = 0;
           char *str;
   
           str = json_token2str(jstr, tok);
           if (!str)
                   return 0;
   
           ret = strtod(str, NULL);
           e_free(str);
           return ret;
   }
   
   /*
  * json_findbykey() - Find data by key   * json_findbykey() - Find data by key
  *   *
  * @jstr = JSON string   * @jstr = JSON string
  * @key = Search key   * @key = Search key
    * @type = Search key for particular token type, if is J_UNDEF this mean any type
  * @toks = Parsed tokens   * @toks = Parsed tokens
  * @toksnum = Number of parsed tokens   * @toksnum = Number of parsed tokens
  * return: =NULL error or !=NULL data token found    * return: =NULL error or !=NULL data token found 
  */   */
 jtok_t *  jtok_t *
json_findbykey(const char *jstr, const char *key, jtok_t * __restrict toks, int toksnum)json_findbykey(const char *jstr, const char *key, jtype_t type, jtok_t * __restrict toks, int toksnum)
 {  {
         jtok_t *tok = NULL;          jtok_t *tok = NULL;
         register int i;          register int i;
Line 507  json_findbykey(const char *jstr, const char *key, jtok Line 530  json_findbykey(const char *jstr, const char *key, jtok
                 if (toks[i].tok_type == J_STRING &&                   if (toks[i].tok_type == J_STRING && 
                                 klen == toks[i].tok_end - toks[i].tok_start &&                                   klen == toks[i].tok_end - toks[i].tok_start && 
                                 !strncmp(jstr + toks[i].tok_start, key, klen)) {                                  !strncmp(jstr + toks[i].tok_start, key, klen)) {
                        tok = toks + i + 1;                        if (type != J_UNDEF) {
                        break;                                if (toks[i + 1].tok_type == type) {
                                         tok = toks + i + 1;
                                         break;
                                 }
                         } else {
                                 tok = toks + i + 1;
                                 break;
                         }
                 }                  }
         }          }
   
Line 982  json_add_array(char * __restrict jstr, int jlen, int w Line 1012  json_add_array(char * __restrict jstr, int jlen, int w
         }          }
   
         return len;          return len;
   }
   
   /*
    * json_dump_yaml() - Dump parsed JSON string to YAML 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_yaml(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, "%.*s", (int) json_toklen(toks), json_tokstr(jstr, toks));
                   return 1;
           } else if (toks->tok_type == J_STRING) {
                   fprintf(f, "%.*s", (int) json_toklen(toks), json_tokstr(jstr, toks));
                   return 1;
           } else if (toks->tok_type == J_OBJECT) {
                   fprintf(f, "\n");
                   for (j = i = 0; i < json_toksize(toks); i++) {
                           for (k = 0; k < indent; k++)
                                   fprintf(f, "  ");
                           j += json_dump_yaml(f, jstr, toks + j + 1, toksnum - j, indent + 1);
                           fprintf(f, ": ");
                           j += json_dump_yaml(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");
                   for (j = i = 0; i < json_toksize(toks); i++) {
                           for (k = 0; k < indent - 1; k++)
                                   fprintf(f, "  ");
                           fprintf(f, "   - ");
                           j += json_dump_yaml(f, jstr, toks + j + 1, toksnum - j, indent + 1);
                           fprintf(f, "\n");
                   }
                   return j + 1;
           }
   
           return 0;
 }  }

Removed from v.1.1.2.11  
changed lines
  Added in v.1.4.6.1


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