61 lines
1.1 KiB
C
61 lines
1.1 KiB
C
#include "map.h"
|
|
|
|
struct map_t * map_create() {
|
|
return calloc(1, sizeof(struct map_t));
|
|
}
|
|
|
|
void map_free(struct map_t *map) {
|
|
struct map_t *m, *tmp;
|
|
|
|
m = map;
|
|
while (m) {
|
|
if (m->key)
|
|
free(m->key);
|
|
if (m->value)
|
|
free(m->value);
|
|
tmp = m;
|
|
m = m->next;
|
|
free(tmp);
|
|
}
|
|
}
|
|
|
|
char * map_get(struct map_t *map, const char *key) {
|
|
struct map_t *m;
|
|
|
|
for (m = map; m != NULL; m = m->next) {
|
|
if (m->key && !strcasecmp(key, m->key))
|
|
return m->value;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void map_set(struct map_t *map, const char *key, const char *val) {
|
|
struct map_t *m;
|
|
|
|
m = map;
|
|
|
|
// Map not empty?
|
|
if (m->key) {
|
|
for ( ; ; m = m->next) {
|
|
// Key exists, freeing strings for reuse.
|
|
if (!strcasecmp(key, m->key)) {
|
|
free(m->key);
|
|
free(m->value);
|
|
break;
|
|
}
|
|
// Last element, adding a new one.
|
|
else if (!m->next) {
|
|
m->next = calloc(1, sizeof(struct map_t));
|
|
m = m->next;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add key and value.
|
|
m->key = calloc(strlen(key) + 1, sizeof(char));
|
|
strcpy(m->key, key);
|
|
m->value = calloc(strlen(val) + 1, sizeof(char));
|
|
strcpy(m->value, val);
|
|
}
|