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
/*
** alias.c for 42sh
**
** Made by Seblu
** Login <seblu@epita.fr>
**
** Started on Wed Aug 23 00:39:17 2006 Seblu
** Last update Thu Nov 16 18:58:49 2006 seblu
*/
#include <string.h>
#include <assert.h>
#include "alias.h"
#include "../common/macro.h"
/*
** ===========
** DEFINITIONS
** ===========
*/
s_alias *alias_init(void)
{
s_alias *new;
secmalloc(new, sizeof (s_alias));
new->count = 0;
new->size = ALIAS_DEFAULT_SIZE;
secmalloc(new->table, new->size * sizeof (s_alias_item));
return new;
}
int alias_add(s_alias *alias, char *name, char *value)
{
int ret;
assert(alias && name);
ret = alias_del(alias, name);
++alias->count;
if (alias->size < alias->count) {
alias->size += ALIAS_PADDING;
secrealloc(alias->table, alias->table, alias->size * sizeof (s_alias_item));
}
alias->table[alias->count - 1].name = name;
alias->table[alias->count - 1].value = value;
return ret;
}
int alias_del(s_alias *alias, const char *name)
{
register size_t i;
assert(alias && name);
for (i = 0; i < alias->count; ++i)
if (!strcmp(name, alias->table[i].name))
break;
if (i >= alias->count)
return 0;
free(alias->table[i].name);
free(alias->table[i].value);
alias->table[i] = alias->table[--alias->count];
if (alias->size - alias->count > 2 * ALIAS_PADDING) {
alias->size -= ALIAS_PADDING;
secrealloc(alias->table, alias->table, alias->size * sizeof (s_alias_item));
}
return 1;
}