#include "namesarchive.h" #include #include #include typedef struct queueElem { char *name; struct queueElem *next; } QueueElem; static QueueElem *head = NULL; static QueueElem *createEmptyElem() { return calloc(1, sizeof(QueueElem)); } static QueueElem *createNameElem(const char *name) { QueueElem *newElem = NULL; if(name != NULL) { newElem = createEmptyElem(); if(newElem != NULL) { newElem->name = malloc(sizeof(char) * (strlen(name)+1)); if(newElem->name != NULL) strcpy(newElem->name, name); else { free(newElem); newElem = NULL; } } } return newElem; } static QueueElem *addNameRec(QueueElem* elem, const char *newName) { if(elem == NULL) elem = createNameElem(newName); else elem->next = addNameRec(elem->next, newName); return elem; } void addName(const char *name) { head = addNameRec(head, name); } static void printNamesRec(QueueElem *elem) { if(elem != NULL) { printf("%s\n", elem->name); printNamesRec(elem->next); } } void printNames() { printNamesRec(head); } static void disposeElem(QueueElem *elem) { if(elem != NULL) free(elem->name); free(elem); } static QueueElem *removeElemRek(QueueElem *elem, const char *name) { if(elem != NULL) { if(strcmp(elem->name, name) == 0) { QueueElem *elemToRemove = elem; elem = elem->next; disposeElem(elemToRemove); } else elem->next = removeElemRek(elem->next, name); } return elem; } void removeName(const char *name) { head = removeElemRek(head, name); } static void clearElemRek(QueueElem *elem) { if(elem != NULL) { clearElemRek(elem->next); disposeElem(elem); } } void clearArchive() { clearElemRek(head); head = NULL; }