#include "libnazgul.h" // on ajoute en fin de queue... int msgQueueAdd(msgQueue * queue, msgQueueElemId newElemId) { msgQueueElem *queueOldTailElem; msgQueueElem *queueNewTailElem; // on informe l'element qu'il est le dernier queueNewTailElem = msgQueueElemOpen(newElemId); if (queueNewTailElem == NULL) { NZG_ERROR("msgQueueElemOpen", newElemId); goto ERROR; } strcpy(queueNewTailElem->next, newElemId); if (msgQueueElemClose(queueNewTailElem) < 0) { NZG_ERROR("msgQueueElemClose", newElemId); goto ERROR; } /* TODO: verifier si la liste n'est pas vide... */ if ((strcmp(queue->headId, queue->id) == 0) && (strcmp(queue->tailId, queue->id) == 0)) { printf("- premier elem de queue -\n"); // on donne a la queue l'id de l'element strcpy(queue->headId, newElemId); strcpy(queue->tailId, newElemId); } else { /* on informe son prédecesseur qu'il a un suivant */ queueOldTailElem = msgQueueElemOpen(queue->tailId); if (queueOldTailElem == NULL) { NZG_ERROR("msgQueueElemOpen", queue->tailId); goto ERROR; } strcpy(queueOldTailElem->next, newElemId); if (msgQueueElemClose(queueOldTailElem) < 0) { NZG_ERROR("msgQueueElemClose", queue->tailId); goto ERROR; } // on donne a la queue l'id du dernier element strcpy(queue->tailId, newElemId); } // on incremente elemCounter queue->elemCounter++; return 0; ERROR: return -1; }