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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
/* eurephia_values.c -- Generic interface for processing key->value pairs
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <eurephia_nullsafe.h>
#include <eurephia_struct.h>
#include <eurephia_log.h>
eurephiaVALUES *eGet_valuestruct(eurephiaVALUES *vls, const char *key) {
eurephiaVALUES *ptr = NULL;
if( vls == NULL ) {
return NULL;
}
ptr = vls;
while( ptr != NULL ) {
if( (key != NULL) && (ptr->key != NULL) && (strcmp(key, ptr->key) == 0) ) {
return ptr;
}
ptr = ptr->next;
}
return NULL;
}
char *eGet_value(eurephiaVALUES *vls, const char *key)
{
eurephiaVALUES *ptr = NULL;
ptr = eGet_valuestruct(vls, key);
return (ptr != NULL ? ptr->val : NULL);
}
eurephiaVALUES *eCreate_value_space(eurephiaCTX *ctx, int evgid)
{
eurephiaVALUES *ptr = NULL;
eurephia_log(ctx, LOG_DEBUG, 12, "Function call: eDBcreate_value_space(ctx)");
ptr = (eurephiaVALUES *) malloc(sizeof(eurephiaVALUES) + 2);
if( ptr == NULL ) {
eurephia_log(ctx, LOG_FATAL, 0, "Could not allocate memory for a new eurephiaVALUE struct");
return NULL;
}
memset(ptr, 0, sizeof(eurephiaVALUES) + 2);
ptr->evgid = evgid;
return ptr;
}
void eAdd_value(eurephiaCTX *ctx, eurephiaVALUES *vls, const char *key, const char *val)
{
eurephiaVALUES *ptr = NULL, *ptr2 = NULL;
int vid = 0;
eurephia_log(ctx, LOG_DEBUG, 12, "Function call: eDBadd_value(ctx, vls(%i), '%s', '%s')",
(vls != NULL ? vls->evid : -1), key, val);
// Allocate buffer and safe values
ptr = eCreate_value_space(ctx, vls->evid);
if( ptr == NULL ) {
eurephia_log(ctx, LOG_FATAL, 0, "Could not add the new value");
return;
}
ptr->key = strdup_nullsafe(key);
ptr->val = strdup_nullsafe(val);
ptr->evgid = vls->evgid;
// Add values to the value chain, loop to the end and append it
ptr2 = vls;
while( ptr2->next != NULL ) {
vid = ptr2->evid;
ptr2 = ptr2->next;
}
ptr->evid = vid+1; // Increase the value counter
ptr2->next = ptr;
}
void eFree_values_func(eurephiaCTX *ctx, eurephiaVALUES *vls) {
eurephiaVALUES *ptr = NULL, *tmp = NULL;
if( (vls == NULL) ) {
return;
}
ptr = vls;
while( ptr != NULL ) {
free_nullsafe(ptr->key);
free_nullsafe(ptr->val);
tmp = ptr->next;
free_nullsafe(ptr);
ptr = tmp;
}
}
|