annotate libsci/util.c @ 34:e52c762d8ba8

misc: cleanups
author David Demelier <markand@malikania.fr>
date Thu, 04 Aug 2022 17:47:19 +0200
parents 1d0ddf9e6efd
children 319979427566
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * util.c -- miscellaneous utilities
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
32
081e1c258e64 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
4 * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
19 #include <sys/stat.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <assert.h>
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
21 #include <errno.h>
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
22 #include <fcntl.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <libgen.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <limits.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <stdarg.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <stdio.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <stdlib.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <string.h>
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
29 #include <unistd.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include "util.h"
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 void *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 util_malloc(size_t size)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 void *ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 if (!(ret = malloc(size)))
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
39 util_die("malloc: %s\n", strerror(errno));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 void *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 util_calloc(size_t n, size_t size)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 void *ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 if (!(ret = calloc(n, size)))
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
50 util_die("calloc: %s\n", strerror(errno));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 void *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 util_realloc(void *ptr, size_t size)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 void *ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 if (!(ret = realloc(ptr, size)) && size)
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
61 util_die("realloc: %s\n", strerror(errno));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 char *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 util_strdup(const char *src)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 char *ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 if (!(ret = strdup(src)))
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
72 util_die("strdup: %s\n", strerror(errno));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 char *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 util_strndup(const char *src, size_t n)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 assert(src);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 char *ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 if (!(ret = strndup(src, n)))
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
85 util_die("strndup: %s\n", strerror(errno));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 char *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 util_basename(const char *str)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 static char ret[PATH_MAX];
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 char tmp[PATH_MAX];
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
96 util_strlcpy(tmp, str, sizeof (tmp));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
97 util_strlcpy(ret, basename(tmp), sizeof (ret));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 char *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 util_dirname(const char *str)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 static char ret[PATH_MAX];
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 char tmp[PATH_MAX];
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
20
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
108 util_strlcpy(tmp, str, sizeof (tmp));
f98ea578b1ef misc: revamp database
David Demelier <markand@malikania.fr>
parents: 19
diff changeset
109 util_strlcpy(ret, dirname(tmp), sizeof (ret));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 return ret;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
113
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
114 FILE *
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
115 util_open_memstream(char **out, size_t *outsz)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 {
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
117 assert(out);
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
118 assert(outsz);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
119
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
120 FILE *fp;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
122 if (!(fp = open_memstream(out, outsz)))
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
123 util_die("open_memstream: %s\n", strerror(errno));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
125 return fp;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 }
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
127
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
128 char *
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
129 util_read(const char *path)
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
130 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
131 int fd;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
132 struct stat st;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
133 char *ret;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
134
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
135 if ((fd = open(path, O_RDONLY)) < 0)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
136 return NULL;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
137 if (fstat(fd, &st) < 0)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
138 return close(fd), NULL;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
139
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
140 ret = util_calloc(1, st.st_size + 1);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
141
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
142 if (read(fd, ret, st.st_size) != st.st_size) {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
143 free(ret);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
144 ret = NULL;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
145 }
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
146
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
147 close(fd);
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
148
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
149 return ret;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
150 }
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
151
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
152 void
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
153 util_die(const char *fmt, ...)
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
154 {
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
155 assert(fmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
156
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
157 va_list ap;
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
158
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
159 va_start(ap, fmt);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
160 vfprintf(stderr, fmt, ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
161 va_end(ap);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
162 exit(1);
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
163 }
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
164
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
165 json_t *
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
166 util_json_pack(const char *fmt, ...)
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
167 {
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
168 va_list ap;
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
169 json_t *doc;
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
170 json_error_t err;
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
171
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
172 va_start(ap, fmt);
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
173 doc = json_vpack_ex(&err, 0, fmt, ap);
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
174 va_end(ap);
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
175
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
176 if (!doc)
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
177 util_die("json_vpack_ex: %s\n", err.text);
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
178
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
179 return doc;
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
180 }
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
181
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
182 char *
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
183 util_json_dump(const json_t *json)
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
184 {
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
185 assert(json);
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
186
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
187 char *ret;
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
188
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
189 if (!(ret = json_dumps(json, JSON_COMPACT)))
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
190 util_die("json_dump: %s\n", strerror(ENOMEM));
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
191
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
192 return ret;
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 26
diff changeset
193 }