aboutsummaryrefslogtreecommitdiff
path: root/scripts/kconfig_parser/symlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kconfig_parser/symlist.c')
-rw-r--r--scripts/kconfig_parser/symlist.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/scripts/kconfig_parser/symlist.c b/scripts/kconfig_parser/symlist.c
new file mode 100644
index 0000000..5423163
--- /dev/null
+++ b/scripts/kconfig_parser/symlist.c
@@ -0,0 +1,49 @@
+#include "symlist.h"
+
+struct symlist *symlist_create() {
+ struct symlist *ret;
+ ret = malloc(sizeof(struct symlist));
+ ret->size = 2;
+ ret->pos = 0;
+ ret->array = malloc(ret->size * sizeof(struct symlist_el));
+ return ret;
+}
+
+void symlist_add(struct symlist *sl, char *name) {
+ if (sl->pos >= sl->size) {
+ sl->size *= 2;
+ sl->array =
+ realloc(sl->array, sl->size * sizeof(struct symlist_el));
+ }
+ sl->array[sl->pos].id = sl->pos + 1;
+ sl->array[sl->pos].name = name;
+ sl->array[sl->pos].be = NULL;
+ sl->pos++;
+}
+
+struct symlist_el *symlist_find(struct symlist *sl, char *name) {
+ int i = 0;
+ while (i < sl->pos) {
+ if (!strcmp(name, sl->array[i].name))
+ return &sl->array[i];
+ i++;
+ }
+ return NULL;
+}
+
+void symlist_print(struct symlist *sl) {
+ int i;
+ for (i = 0; i < sl->pos; i++) {
+ printf("%d:%s\n", sl->array[i].id, sl->array[i].name);
+ if (sl->array[i].be != NULL) {
+ printf(" ");
+ cnf_printf(sl->array[i].be);
+ printf("\n");
+ }
+ }
+}
+
+void symlist_free(struct symlist *sl) {
+ free(sl->array);
+ free(sl);
+}