Diff for /libelwix/src/json.c between versions 1.5 and 1.8

version 1.5, 2018/04/19 00:00:36 version 1.8, 2019/09/24 15:49:52
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 - 2018Copyright 2004 - 2019
         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 224  json_parse_value(json_t * __restrict json, const char  Line 224  json_parse_value(json_t * __restrict json, const char 
                         case '}':                          case '}':
                                 goto found;                                  goto found;
                 }                  }
                if (jstr[json->h_pos] < 32 || jstr[json->h_pos] > 127) {                if (jstr[json->h_pos] < 32 || (u_char) jstr[json->h_pos] > 127) {
                         json->h_pos = pos;                          json->h_pos = pos;
                         elwix_SetErr(J_ERR_INVAL, "%s", jerrstr[J_ERR_INVAL]);                          elwix_SetErr(J_ERR_INVAL, "%s", jerrstr[J_ERR_INVAL]);
                         return -1;                          return -1;
Line 442  json_token2val(const char *jstr, jtok_t * __restrict t Line 442  json_token2val(const char *jstr, jtok_t * __restrict t
 char *  char *
 json_token2str(const char *jstr, jtok_t * __restrict tok)  json_token2str(const char *jstr, jtok_t * __restrict tok)
 {  {
        char *str = NULL;        char *s, *s2, *wrk, *str = NULL;
         size_t len;          size_t len;
   
         if (!jstr || !tok)          if (!jstr || !tok)
                 return NULL;                  return NULL;
   
   
         len = json_toklen(tok);          len = json_toklen(tok);
         str = e_malloc(len + 1);          str = e_malloc(len + 1);
         if (!str)          if (!str)
                 return NULL;                  return NULL;
         else {          else {
                strncpy(str, json_tokstr(jstr, tok), len);                memset(str, 0, len + 1);
                str[len] = 0;
                 wrk = e_strdup(json_tokstr(jstr, tok));
                 wrk[len] = 0;
                 for (s = wrk, s2 = str; *s; s++)
                         *s2++ = (*s != '\\') ? *s : *++s;
                 e_free(wrk);
         }          }
   
         return str;          return str;
Line 505  json_token2dbl(const char *jstr, jtok_t * __restrict t Line 511  json_token2dbl(const char *jstr, jtok_t * __restrict t
 }  }
   
 /*  /*
    * json_token2bool() - Return token to bool int
    *
    * @jstr = JSON string
    * @tok = Token for convert
    * @return 0 for FALSE and !=0 for TRUE
    */
   int
   json_token2bool(const char *jstr, jtok_t * __restrict tok)
   {
           double ret = 0;
           char *str;
   
           str = json_token2str(jstr, tok);
           if (!str)
                   return 0;
   
           switch (*str) {
                   case 't':
                   case 'T':
                           ret = 1;
                           break;
                   case 'f':
                   case 'F':
                           ret = 0;
                           break;
                   default:
                           ret = (int) strtol(str, NULL, 10);
                           break;
           }
           e_free(str);
           return ret;
   }
   
   /*
  * json_findbykey() - Find token data by key   * json_findbykey() - Find token data by key
  *   *
  * @jstr = JSON string   * @jstr = JSON string
Line 983  json_add_pair(char * __restrict jstr, int jlen, int ws Line 1023  json_add_pair(char * __restrict jstr, int jlen, int ws
                 return -1;                  return -1;
         }          }
         if ((len = json_add_string(jstr, jlen, 0, val)) == -1) {          if ((len = json_add_string(jstr, jlen, 0, val)) == -1) {
                   jstr[eos] = 0;
                   return -1;
           }
   
           return len;
   }
   
   /*
    * json_add_pair2() - Adds key/value pair with formated args
    *
    * @jstr = JSON string
    * @jlen = JSON string length
    * @wspace = whitespace include
    * @key = Key string
    * @fmt = Format string for values
    * return: -1 error or !=-1 actual JSON string length
    */
   int
   json_add_pair2(char * __restrict jstr, int jlen, int wspace, const char *key, const char *fmt, ...)
   {
           int len = -1;
           size_t eos;
           va_list lst;
           char szStr[BUFSIZ] = { [0 ... BUFSIZ - 1] = 0 };
   
           if (!jstr || !key || !fmt)
                   return -1;
           else
                   eos = strlen(jstr);
   
           if (json_add_string(jstr, jlen, 0, key) == -1) {
                   jstr[eos] = 0;
                   return -1;
           }
           if (json_add_colon(jstr, jlen, wspace) == -1) {
                   jstr[eos] = 0;
                   return -1;
           }
           va_start(lst, fmt);
           vsnprintf(szStr, sizeof szStr, fmt, lst);
           va_end(lst);
           if ((len = json_add_string(jstr, jlen, 0, szStr)) == -1) {
                 jstr[eos] = 0;                  jstr[eos] = 0;
                 return -1;                  return -1;
         }          }

Removed from v.1.5  
changed lines
  Added in v.1.8


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