This repository has been archived on 2026-05-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2026-04-20 20:09:16 +02:00

67 lines
1.4 KiB
C

#include "expansion.h"
#include <stdlib.h>
#include <string.h>
struct var *var_add(struct var *list, const char *key, const char *value) {
struct var *node = malloc(sizeof(struct var));
if (!node)
return NULL;
node->key = strdup(key);
node->value = strdup(value);
if (!node->key || !node->value) {
free(node->key);
free(node->value);
free(node);
return NULL;
}
node->next = list;
return node;
}
const char *var_get(struct var *list, const char *key) {
while (list)
{
if (strcmp(list->key, key) == 0)
return list->value;
list = list->next;
}
return NULL;
}
size_t var_size(struct var *list) {
size_t n = 0;
while (list)
{
n++;
list = list->next;
}
return n;
}
int var_update(struct var *list, const char *key, const char *value) {
while (list)
{
if (strcmp(list->key, key) == 0) {
char *new_val = strdup(value);
if (!new_val)
return -1;
free(list->value);
list->value = new_val;
return 0;
}
list = list->next;
}
return -1;
}
void var_free(struct var *list) {
while (list) {
struct var *next = list->next;
free(list->key);
free(list->value);
free(list);
list = next;
}
}