l3.libnazgul/src/queueElemDelete.c

34 lines
660 B
C

#include "libnazgul.h"
int msgQueueElemDelete(msgQueueElemId queueElemId)
{
msgQueueElem *queueElem;
msgQueueElemId nextIdToDie;
queueElem = msgQueueElemOpen(queueElemId);
if (queueElem == NULL) {
NZG_ERROR("msgQueueElemOpen", queueElemId);
goto ERROR;
}
strcpy(nextIdToDie, queueElem->next);
if (msgQueueElemClose(queueElem) < 0) {
NZG_ERROR("msgQueueElemClose", queueElemId);
goto ERROR;
}
// on détruit l'élément
shm_unlink(queueElemId);
if (nextIdToDie != queueElemId) {
return msgQueueElemDelete(nextIdToDie);
} else {
printf("msgQueueElemDelete: EOL reached \n");
// element unique...
return 0;
}
ERROR:
return -1;
}