#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; }