summaryrefslogtreecommitdiff
path: root/list.c
diff options
context:
space:
mode:
Diffstat (limited to 'list.c')
-rw-r--r--list.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/list.c b/list.c
index 24d265c..2fa06ab 100644
--- a/list.c
+++ b/list.c
@@ -1,4 +1,5 @@
#define _XOPEN_SOURCE 700
+#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -34,3 +35,45 @@ struct majefile *insert_file(struct majefile *list, const char *path, const stru
}
return tmp;
}
+
+struct majeflag *insert_flag(struct majeflag *list, char *flag)
+{
+ char *eq = strchr(flag, '=');
+ *eq = '\0';
+ eq++;
+
+ int type = 0;
+ if (!strcmp(flag, "MAJE_CFLAG")) {
+ type = MAJE_CFLAG;
+ } else if (!strcmp(flag, "MAJE_LDFLAG")) {
+ type = MAJE_LDFLAG;
+ } else if (!strcmp(flag, "MAJE_LDLIB")) {
+ type = MAJE_LDLIB;
+ } else {
+ fprintf(stderr, "maje: unkonwn directive '%s'\n", flag);
+ return list;
+ }
+
+ struct majeflag *tmp = malloc(sizeof(*tmp) + strlen(flag) + 1);
+ if (tmp == NULL) {
+ return NULL;
+ }
+
+ tmp->next = NULL;
+ tmp->prev = NULL;
+
+ tmp->type = type;
+ strcpy(tmp->flag, eq);
+
+ if (list == NULL) {
+ return tmp;
+ }
+
+ tmp->next = list->next;
+ tmp->prev = list;
+ list->next = tmp;
+ if (tmp->next != NULL) {
+ tmp->next->prev = tmp;
+ }
+ return tmp;
+}