#define _XOPEN_SOURCE 700 #include #include #include #include "maje.h" struct majefile *insert_file(struct majefile *list, const char *path, const struct stat *st) { struct majefile *tmp = malloc(sizeof(*tmp) + strlen(path) + 1); if (tmp == NULL) { return NULL; } tmp->next = NULL; tmp->prev = NULL; if (st) { tmp->st = *st; } else { tmp->st = (struct stat) { 0 }; } strcpy(tmp->path, path); 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; } 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 if (!strcmp(flag, "MAJE_LIB")) { type = MAJE_LIB; } 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; }