Newer
Older
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
/*
** alias.c for 42sh
**
** Made by Seblu
** Login <seblu@epita.fr>
**
** Started on Wed Aug 23 00:39:17 2006 Seblu
** Last update Wed Aug 23 18:47:59 2006 Seblu
*/
#include <string.h>
#include "alias.h"
#include "../common/mem.h"
static size_t step = 5;
ts_aliases *alias_init(void)
{
ts_aliases *new;
secmalloc(new, sizeof (ts_aliases));
new->size = step;
new->pos = 0;
new->db = NULL;
return new;
}
void alias_add(ts_aliases *aliases, const char *name, const char *value)
{
ts_alias *new;
int freeplace = 0;
size_t index;
//check if already exist and if free place exist
for (register int i = 0; aliases && aliases->db[i]; ++i)
if (!strcmp(aliases->db[i]->name, name)) {
free(aliases->db[i]->value);
aliases->db[i]->value = strdup(value);
return;
}
else if (!freeplace && *aliases->db[i]->name == 0)
index = i;
//if a place is free, fill it
if (freeplace) {
aliases->db[index]->name = strdup(name);
aliases->db[index]->value = strdup(value);
return;
}
//create a new one
secmalloc(new, sizeof (ts_alias));
new->name = strdup(name);
new->value = strdup(value);
//add a new alias if not find
if (aliases->pos >= aliases->size) {
aliases->size += step;
secrealloc(aliases->db, aliases->db, aliases->size * sizeof (ts_alias));
}
aliases->db[aliases->pos] = new;
++aliases->pos;
}
int alias_remove(ts_aliases *aliases, const char *name)
{
//find alias index
for (register int i = 0; aliases && aliases->db[i]; ++i)
if (!strcmp(aliases->db[i]->name, name)) {
free(aliases->db[i]->name);
free(aliases->db[i]->value);
aliases->db[i]->name = "";
return 1;
}
return 0;
}