Rune - Implement hard-locking model feature
[rune.git] / libruntime / ary.c
1 /*
2  * ARY.C
3  *
4  * (c)Copyright 2106, Matthew Dillon, All Rights Reserved.  See the  
5  *    COPYRIGHT file at the base of the distribution.
6  */
7
8 #include "defs.h"
9
10 runelib_list_t RuneAddLibsList = RUNE_HEAD_INITIALIZER(RuneAddLibsList);
11
12 void
13 runearyadd(runeary_t *ary, const char *ctl, ...)
14 {
15         char *ptr;
16         va_list va;
17
18         va_start(va, ctl);
19         vasprintf(&ptr, ctl, va);
20         va_end(va);
21
22         if (ary->ac >= ary->entries - 2) {
23                 ary->entries += 16;
24                 ary->av = realloc(ary->av, ary->entries * sizeof(char *));
25         }
26         ary->av[ary->ac++] = ptr;
27         ary->av[ary->ac] = NULL;
28 }
29
30 void
31 runearyfree(runeary_t *ary)
32 {
33         int i;
34
35         for (i = 0; i < ary->ac; ++i)
36                 free(ary->av[i]);
37         bzero(ary, sizeof(*ary));
38 }
39
40 void
41 runeaddlib(const char *ctl, ...)
42 {
43         char *ptr;
44         va_list va;
45         runelib_t *lib;
46
47         va_start(va, ctl);
48         vasprintf(&ptr, ctl, va);
49         va_end(va);
50
51         lib = zalloc(sizeof(*lib));
52         lib->linklib = ptr;
53         RUNE_INSERT_TAIL(&RuneAddLibsList, lib, node);
54 }