50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
#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;
|
|
}
|