Update libjansson to 2.10.

This commit is contained in:
XMRig 2017-06-06 03:31:44 +03:00
parent 7741c341c7
commit 6551818610
7 changed files with 115 additions and 15 deletions

View file

@ -6,6 +6,8 @@ add_definitions(-DHAVE_CONFIG_H)
# Add the lib sources. # Add the lib sources.
file(GLOB JANSSON_SRC *.c) file(GLOB JANSSON_SRC *.c)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os")
set(JANSSON_HDR_PRIVATE set(JANSSON_HDR_PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/hashtable.h ${CMAKE_CURRENT_SOURCE_DIR}/hashtable.h
${CMAKE_CURRENT_SOURCE_DIR}/jansson_private.h ${CMAKE_CURRENT_SOURCE_DIR}/jansson_private.h

View file

@ -9,13 +9,17 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#endif #endif
#include "jansson_private.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "jansson.h" #include "jansson.h"
#include "jansson_private.h"
#include "strbuffer.h" #include "strbuffer.h"
#include "utf.h" #include "utf.h"
@ -25,11 +29,28 @@
#define FLAGS_TO_INDENT(f) ((f) & 0x1F) #define FLAGS_TO_INDENT(f) ((f) & 0x1F)
#define FLAGS_TO_PRECISION(f) (((f) >> 11) & 0x1F) #define FLAGS_TO_PRECISION(f) (((f) >> 11) & 0x1F)
struct buffer {
const size_t size;
size_t used;
char *data;
};
static int dump_to_strbuffer(const char *buffer, size_t size, void *data) static int dump_to_strbuffer(const char *buffer, size_t size, void *data)
{ {
return strbuffer_append_bytes((strbuffer_t *)data, buffer, size); return strbuffer_append_bytes((strbuffer_t *)data, buffer, size);
} }
static int dump_to_buffer(const char *buffer, size_t size, void *data)
{
struct buffer *buf = (struct buffer *)data;
if(buf->used + size <= buf->size)
memcpy(&buf->data[buf->used], buffer, size);
buf->used += size;
return 0;
}
static int dump_to_file(const char *buffer, size_t size, void *data) static int dump_to_file(const char *buffer, size_t size, void *data)
{ {
FILE *dest = (FILE *)data; FILE *dest = (FILE *)data;
@ -38,6 +59,16 @@ static int dump_to_file(const char *buffer, size_t size, void *data)
return 0; return 0;
} }
static int dump_to_fd(const char *buffer, size_t size, void *data)
{
int *dest = (int *)data;
#ifdef HAVE_UNISTD_H
if(write(*dest, buffer, size) == (ssize_t)size)
return 0;
#endif
return -1;
}
/* 32 spaces (the maximum indentation size) */ /* 32 spaces (the maximum indentation size) */
static const char whitespace[] = " "; static const char whitespace[] = " ";
@ -168,6 +199,10 @@ static int compare_keys(const void *key1, const void *key2)
static int do_dump(const json_t *json, size_t flags, int depth, static int do_dump(const json_t *json, size_t flags, int depth,
json_dump_callback_t dump, void *data) json_dump_callback_t dump, void *data)
{ {
int embed = flags & JSON_EMBED;
flags &= ~JSON_EMBED;
if(!json) if(!json)
return -1; return -1;
@ -227,11 +262,11 @@ static int do_dump(const json_t *json, size_t flags, int depth,
n = json_array_size(json); n = json_array_size(json);
if(dump("[", 1, data)) if(!embed && dump("[", 1, data))
goto array_error; goto array_error;
if(n == 0) { if(n == 0) {
array->visited = 0; array->visited = 0;
return dump("]", 1, data); return embed ? 0 : dump("]", 1, data);
} }
if(dump_indent(flags, depth + 1, 0, dump, data)) if(dump_indent(flags, depth + 1, 0, dump, data))
goto array_error; goto array_error;
@ -255,7 +290,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,
} }
array->visited = 0; array->visited = 0;
return dump("]", 1, data); return embed ? 0 : dump("]", 1, data);
array_error: array_error:
array->visited = 0; array->visited = 0;
@ -286,11 +321,11 @@ static int do_dump(const json_t *json, size_t flags, int depth,
iter = json_object_iter((json_t *)json); iter = json_object_iter((json_t *)json);
if(dump("{", 1, data)) if(!embed && dump("{", 1, data))
goto object_error; goto object_error;
if(!iter) { if(!iter) {
object->visited = 0; object->visited = 0;
return dump("}", 1, data); return embed ? 0 : dump("}", 1, data);
} }
if(dump_indent(flags, depth + 1, 0, dump, data)) if(dump_indent(flags, depth + 1, 0, dump, data))
goto object_error; goto object_error;
@ -386,7 +421,7 @@ static int do_dump(const json_t *json, size_t flags, int depth,
} }
object->visited = 0; object->visited = 0;
return dump("}", 1, data); return embed ? 0 : dump("}", 1, data);
object_error: object_error:
object->visited = 0; object->visited = 0;
@ -416,11 +451,26 @@ char *json_dumps(const json_t *json, size_t flags)
return result; return result;
} }
size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags)
{
struct buffer buf = { size, 0, buffer };
if(json_dump_callback(json, dump_to_buffer, (void *)&buf, flags))
return 0;
return buf.used;
}
int json_dumpf(const json_t *json, FILE *output, size_t flags) int json_dumpf(const json_t *json, FILE *output, size_t flags)
{ {
return json_dump_callback(json, dump_to_file, (void *)output, flags); return json_dump_callback(json, dump_to_file, (void *)output, flags);
} }
int json_dumpfd(const json_t *json, int output, size_t flags)
{
return json_dump_callback(json, dump_to_fd, (void *)&output, flags);
}
int json_dump_file(const json_t *json, const char *path, size_t flags) int json_dump_file(const json_t *json, const char *path, size_t flags)
{ {
int result; int result;

View file

@ -168,12 +168,12 @@ static uint32_t generate_seed() {
int done = 0; int done = 0;
#if !defined(_WIN32) && defined(USE_URANDOM) #if !defined(_WIN32) && defined(USE_URANDOM)
if (!done && seed_from_urandom(&seed) == 0) if (seed_from_urandom(&seed) == 0)
done = 1; done = 1;
#endif #endif
#if defined(_WIN32) && defined(USE_WINDOWS_CRYPTOAPI) #if defined(_WIN32) && defined(USE_WINDOWS_CRYPTOAPI)
if (!done && seed_from_windows_cryptoapi(&seed) == 0) if (seed_from_windows_cryptoapi(&seed) == 0)
done = 1; done = 1;
#endif #endif

View file

@ -21,11 +21,11 @@ extern "C" {
/* version */ /* version */
#define JANSSON_MAJOR_VERSION 2 #define JANSSON_MAJOR_VERSION 2
#define JANSSON_MINOR_VERSION 9 #define JANSSON_MINOR_VERSION 10
#define JANSSON_MICRO_VERSION 0 #define JANSSON_MICRO_VERSION 0
/* Micro version is omitted if it's 0 */ /* Micro version is omitted if it's 0 */
#define JANSSON_VERSION "2.9" #define JANSSON_VERSION "2.10"
/* Version as a 3-byte hex number, e.g. 0x010201 == 1.2.1. Use this /* Version as a 3-byte hex number, e.g. 0x010201 == 1.2.1. Use this
for numeric comparisons, e.g. #if JANSSON_VERSION_HEX >= ... */ for numeric comparisons, e.g. #if JANSSON_VERSION_HEX >= ... */
@ -273,6 +273,7 @@ typedef size_t (*json_load_callback_t)(void *buffer, size_t buflen, void *data);
json_t *json_loads(const char *input, size_t flags, json_error_t *error); json_t *json_loads(const char *input, size_t flags, json_error_t *error);
json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t *error); json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t *error);
json_t *json_loadf(FILE *input, size_t flags, json_error_t *error); json_t *json_loadf(FILE *input, size_t flags, json_error_t *error);
json_t *json_loadfd(int input, size_t flags, json_error_t *error);
json_t *json_load_file(const char *path, size_t flags, json_error_t *error); json_t *json_load_file(const char *path, size_t flags, json_error_t *error);
json_t *json_load_callback(json_load_callback_t callback, void *data, size_t flags, json_error_t *error); json_t *json_load_callback(json_load_callback_t callback, void *data, size_t flags, json_error_t *error);
@ -288,11 +289,14 @@ json_t *json_load_callback(json_load_callback_t callback, void *data, size_t fla
#define JSON_ENCODE_ANY 0x200 #define JSON_ENCODE_ANY 0x200
#define JSON_ESCAPE_SLASH 0x400 #define JSON_ESCAPE_SLASH 0x400
#define JSON_REAL_PRECISION(n) (((n) & 0x1F) << 11) #define JSON_REAL_PRECISION(n) (((n) & 0x1F) << 11)
#define JSON_EMBED 0x10000
typedef int (*json_dump_callback_t)(const char *buffer, size_t size, void *data); typedef int (*json_dump_callback_t)(const char *buffer, size_t size, void *data);
char *json_dumps(const json_t *json, size_t flags); char *json_dumps(const json_t *json, size_t flags);
size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags);
int json_dumpf(const json_t *json, FILE *output, size_t flags); int json_dumpf(const json_t *json, FILE *output, size_t flags);
int json_dumpfd(const json_t *json, int output, size_t flags);
int json_dump_file(const json_t *json, const char *path, size_t flags); int json_dump_file(const json_t *json, const char *path, size_t flags);
int json_dump_callback(const json_t *json, json_dump_callback_t callback, void *data, size_t flags); int json_dump_callback(const json_t *json, json_dump_callback_t callback, void *data, size_t flags);

View file

@ -8,6 +8,7 @@
#ifndef JANSSON_PRIVATE_H #ifndef JANSSON_PRIVATE_H
#define JANSSON_PRIVATE_H #define JANSSON_PRIVATE_H
#include "jansson_private_config.h"
#include <stddef.h> #include <stddef.h>
#include "jansson.h" #include "jansson.h"
#include "hashtable.h" #include "hashtable.h"

View file

@ -9,15 +9,19 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#endif #endif
#include "jansson_private.h"
#include <errno.h> #include <errno.h>
#include <limits.h> #include <limits.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "jansson.h" #include "jansson.h"
#include "jansson_private.h"
#include "strbuffer.h" #include "strbuffer.h"
#include "utf.h" #include "utf.h"
@ -340,7 +344,7 @@ static void lex_scan_string(lex_t *lex, json_error_t *error)
/* control character */ /* control character */
lex_unget_unsave(lex, c); lex_unget_unsave(lex, c);
if(c == '\n') if(c == '\n')
error_set(error, lex, "unexpected newline", c); error_set(error, lex, "unexpected newline");
else else
error_set(error, lex, "control character 0x%x", c); error_set(error, lex, "control character 0x%x", c);
goto out; goto out;
@ -914,7 +918,7 @@ static json_t *parse_json(lex_t *lex, size_t flags, json_error_t *error)
typedef struct typedef struct
{ {
const char *data; const char *data;
int pos; size_t pos;
} string_data_t; } string_data_t;
static int string_get(void *data) static int string_get(void *data)
@ -1028,6 +1032,45 @@ json_t *json_loadf(FILE *input, size_t flags, json_error_t *error)
return result; return result;
} }
static int fd_get_func(int *fd)
{
uint8_t c;
#ifdef HAVE_UNISTD_H
if (read(*fd, &c, 1) == 1)
return c;
#endif
return EOF;
}
json_t *json_loadfd(int input, size_t flags, json_error_t *error)
{
lex_t lex;
const char *source;
json_t *result;
#ifdef HAVE_UNISTD_H
if(input == STDIN_FILENO)
source = "<stdin>";
else
#endif
source = "<stream>";
jsonp_error_init(error, source);
if (input < 0) {
error_set(error, NULL, "wrong arguments");
return NULL;
}
if(lex_init(&lex, (get_func)fd_get_func, flags, &input))
return NULL;
result = parse_json(&lex, flags, error);
lex_close(&lex);
return result;
}
json_t *json_load_file(const char *path, size_t flags, json_error_t *error) json_t *json_load_file(const char *path, size_t flags, json_error_t *error)
{ {
json_t *result; json_t *result;

View file

@ -27,7 +27,7 @@
#define APP_ID "xmrig" #define APP_ID "xmrig"
#define APP_NAME "XMRig" #define APP_NAME "XMRig"
#define APP_DESC "Monero (XMR) CPU miner" #define APP_DESC "Monero (XMR) CPU miner"
#define APP_VERSION "0.8.3" #define APP_VERSION "0.8.3-dev"
#define APP_DOMAIN "xmrig.com" #define APP_DOMAIN "xmrig.com"
#define APP_SITE "www.xmrig.com" #define APP_SITE "www.xmrig.com"
#define APP_COPYRIGHT "Copyright (C) 2016-2017 xmrig.com" #define APP_COPYRIGHT "Copyright (C) 2016-2017 xmrig.com"