#include "libnazgul.h" // ajoute un element en début de liste. // fait pointer l'ancien dernier vers lui // il s'enregistre en tant que dernier chez la liste int msgSpaceListAdd(msgSpaceListElemId newElemId) { msgSpaceListElem *listOldTailElem; msgSpaceListElem *listNewTailElem; msgSpaceList *list; list = msgSpaceListOpen(); if (list == NULL) { NZG_ERROR("msgSpaceListOpen", ""); goto ERROR; } // on informe l'element qui est le dernier listNewTailElem = msgSpaceListElemOpen(newElemId); if (listNewTailElem == NULL) { NZG_ERROR("msgSpaceListElemOpen", newElemId); goto ERROR; } strcpy(listNewTailElem->next, newElemId); if (msgSpaceListElemClose(listNewTailElem) < 0) { NZG_ERROR("msgSpaceListElemClose", newElemId); goto ERROR; } /* verifier si la liste n'est pas vide... */ if ((strcmp(list->headId, list->id) == 0) && (strcmp(list->tailId, list->id) == 0)) { printf("- premier elem de spaceList -\n"); // on donne a la queue l'id de l'element strcpy(list->headId, newElemId); strcpy(list->tailId, newElemId); } else { /* on informe son prédecesseur qu'il a un suivant */ listOldTailElem = msgSpaceListElemOpen(list->tailId); if (listOldTailElem == NULL) { NZG_ERROR("msgSpaceListElemOpen", list->tailId); goto ERROR; } strcpy(listOldTailElem->next, newElemId); if (msgSpaceListElemClose(listOldTailElem) < 0) { NZG_ERROR("msgSpaceListElemClose", list->tailId); goto ERROR; } // on donne a la queue l'id du dernier element strcpy(list->tailId, newElemId); } // on incremente elemCounter msgSpaceListClose(list); return 0; ERROR: return -1; }