Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tpruvot
GitHub Repository: tpruvot/cpuminer-multi
Path: blob/linux/compat/jansson/jansson_private.h
1201 views
1
/*
2
* Copyright (c) 2009-2013 Petri Lehtinen <[email protected]>
3
*
4
* Jansson is free software; you can redistribute it and/or modify
5
* it under the terms of the MIT license. See LICENSE for details.
6
*/
7
8
#ifndef JANSSON_PRIVATE_H
9
#define JANSSON_PRIVATE_H
10
11
#include <stddef.h>
12
#include "jansson.h"
13
#include "hashtable.h"
14
#include "strbuffer.h"
15
16
#define container_of(ptr_, type_, member_) \
17
((type_ *)((char *)ptr_ - offsetof(type_, member_)))
18
19
/* On some platforms, max() may already be defined */
20
#ifndef max
21
#define max(a, b) ((a) > (b) ? (a) : (b))
22
#endif
23
24
/* va_copy is a C99 feature. In C89 implementations, it's sometimes
25
available as __va_copy. If not, memcpy() should do the trick. */
26
#ifndef va_copy
27
#ifdef __va_copy
28
#define va_copy __va_copy
29
#else
30
#define va_copy(a, b) memcpy(&(a), &(b), sizeof(va_list))
31
#endif
32
#endif
33
34
typedef struct {
35
json_t json;
36
hashtable_t hashtable;
37
size_t serial;
38
int visited;
39
} json_object_t;
40
41
typedef struct {
42
json_t json;
43
size_t size;
44
size_t entries;
45
json_t **table;
46
int visited;
47
} json_array_t;
48
49
typedef struct {
50
json_t json;
51
char *value;
52
} json_string_t;
53
54
typedef struct {
55
json_t json;
56
double value;
57
} json_real_t;
58
59
typedef struct {
60
json_t json;
61
json_int_t value;
62
} json_integer_t;
63
64
#define json_to_object(json_) container_of(json_, json_object_t, json)
65
#define json_to_array(json_) container_of(json_, json_array_t, json)
66
#define json_to_string(json_) container_of(json_, json_string_t, json)
67
#define json_to_real(json_) container_of(json_, json_real_t, json)
68
#define json_to_integer(json_) container_of(json_, json_integer_t, json)
69
70
void jsonp_error_init(json_error_t *error, const char *source);
71
void jsonp_error_set_source(json_error_t *error, const char *source);
72
void jsonp_error_set(json_error_t *error, int line, int column,
73
size_t position, const char *msg, ...);
74
void jsonp_error_vset(json_error_t *error, int line, int column,
75
size_t position, const char *msg, va_list ap);
76
77
/* Locale independent string<->double conversions */
78
int jsonp_strtod(strbuffer_t *strbuffer, double *out);
79
int jsonp_dtostr(char *buffer, size_t size, double value);
80
81
/* Wrappers for custom memory functions */
82
void* jsonp_malloc(size_t size);
83
void jsonp_free(void *ptr);
84
char *jsonp_strndup(const char *str, size_t length);
85
char *jsonp_strdup(const char *str);
86
87
/* Windows compatibility */
88
#ifdef _WIN32
89
#define snprintf _snprintf
90
#define vsnprintf _vsnprintf
91
#endif
92
93
#endif
94
95