summaryrefslogtreecommitdiff
path: root/util.c
blob: 020485c678b4a674ebaf6dfde217ef83e16f79c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <string.h>
#include <stdlib.h>
#include "util.h"

#define SLMAX 100

char * alloc_build_string(const char *ss[])
{
	size_t total_len = 1;
	size_t slens[SLMAX]; /* should be enough */
	int ns = 0;
	for (int i = 0; ss[i] != NULL; i++) {
		if (ns >= SLMAX)
			return NULL;
		size_t l = strlen(ss[i]);
		slens[ns] = l;
		ns++;
		total_len += l;
	}
	char *res = malloc(total_len);
	size_t cur = 0;
	for (int i = 0; i < ns; i++) {
		memcpy(res+cur, ss[i], slens[i]);
		cur += slens[i];
	}
	res[cur] = 0;
	return res;
}

const char *json_gets(json_object *j, const char *key)
{
	json_object *val;

	if (json_object_object_get_ex(j, key, &val)) {
		if (json_object_is_type(val, json_type_string))
			return json_object_get_string(val);
	}
	return NULL;
}

char *json_gets_dup(json_object *j, const char *key)
{
	const char *t = json_gets(j, key);
	if (t == NULL)
		return NULL;
	else
		return strdup(t);
}