l3.libnazgul/src/queueAdd.c

50 lines
1.4 KiB
C
Raw Normal View History

2004-02-23 21:19:20 +00:00
#include "libnazgul.h"
// on ajoute en fin de queue...
2020-03-03 23:06:43 +00:00
int msgQueueAdd(msgQueue * queue, msgQueueElemId newElemId)
{
msgQueueElem *queueOldTailElem;
msgQueueElem *queueNewTailElem;
2004-02-23 21:41:20 +00:00
// on informe l'element qu'il est le dernier
2020-03-03 23:06:43 +00:00
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;
2004-02-23 21:41:20 +00:00
}
2004-02-23 21:19:20 +00:00
2004-02-23 21:41:20 +00:00
/* TODO: verifier si la liste n'est pas vide... */
2020-03-03 23:06:43 +00:00
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);
2004-02-25 11:44:41 +00:00
} else {
2020-03-03 23:06:43 +00:00
/* on informe son pr<70>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);
2004-02-23 22:34:28 +00:00
}
// on incremente elemCounter
queue->elemCounter++;
2004-02-25 11:34:49 +00:00
return 0;
2020-03-03 23:06:43 +00:00
ERROR:
2004-02-23 21:41:20 +00:00
return -1;
2004-02-23 21:19:20 +00:00
}