l3.libnazgul/src/queueRem.c

38 lines
954 B
C

#include "libnazgul.h"
// l'id de l'element enlevé vas dans oldElemId
int msgQueueRem(msgQueue * queue, msgQueueElemId oldElemId)
{
msgQueueElem *queueOldHeadElem;
if (strcmp(queue->headId, queue->id) == 0) {
NZG_ERROR("msgQueueElemRem : Empty queue", queue->id);
goto ERROR;
}
strcpy(oldElemId, queue->headId);
queueOldHeadElem = msgQueueElemOpen(oldElemId);
if (queueOldHeadElem == NULL) {
NZG_ERROR("msgQueueElemOpen", oldElemId);
goto ERROR;
}
// on indique à la queue le nouveau premier element
strcpy(queue->headId, queueOldHeadElem->next);
if (strcmp(queueOldHeadElem->next, oldElemId) == 0) {
strcpy(queue->headId, queue->id);
}
// on fait en sorte que l'element ne connaisse plus
// ses voisins (utile pour le Delete)
strcpy(queueOldHeadElem->next, queueOldHeadElem->id);
if (msgQueueElemClose(queueOldHeadElem) < 0) {
NZG_ERROR("msgQueueElemClose", oldElemId);
goto ERROR;
}
return 0;
ERROR:
return -1;
}