2004-02-23 09:42:25 +00:00
|
|
|
|
#include "libnazgul.h"
|
|
|
|
|
|
2004-02-25 23:49:39 +00:00
|
|
|
|
#define DEBUG 1
|
2004-02-23 09:42:25 +00:00
|
|
|
|
|
2020-03-03 23:06:43 +00:00
|
|
|
|
int msgSpaceListRem(msgSpaceId spaceId)
|
|
|
|
|
{
|
|
|
|
|
msgSpaceList *list;
|
|
|
|
|
msgSpaceListElemId listHeadElemId;
|
|
|
|
|
msgSpaceListElemId listTailElemId;
|
|
|
|
|
msgSpaceListId listId;
|
2004-02-26 07:36:00 +00:00
|
|
|
|
|
2020-03-03 23:06:43 +00:00
|
|
|
|
msgSpaceListElemId prevElemId;
|
|
|
|
|
msgSpaceListElemId currElemId;
|
|
|
|
|
msgSpaceListElemId nextElemId;
|
2004-02-26 07:36:00 +00:00
|
|
|
|
|
2020-03-03 23:06:43 +00:00
|
|
|
|
msgSpaceListElem *prevElem;
|
|
|
|
|
msgSpaceListElem *currElem;
|
|
|
|
|
msgSpaceId currSpaceId;
|
2004-02-26 07:36:00 +00:00
|
|
|
|
|
2020-03-03 23:06:43 +00:00
|
|
|
|
list = msgSpaceListOpen();
|
|
|
|
|
if (list == NULL) {
|
|
|
|
|
NZG_ERROR("msgSpaceListOpen", "");
|
2004-02-26 07:19:08 +00:00
|
|
|
|
goto ERROR;
|
2020-03-03 23:06:43 +00:00
|
|
|
|
}
|
|
|
|
|
if (DEBUG) {
|
|
|
|
|
printf("Before ListStrCpy\n");
|
|
|
|
|
}
|
|
|
|
|
strcpy(listHeadElemId, list->headId);
|
|
|
|
|
strcpy(listTailElemId, list->tailId);
|
|
|
|
|
strcpy(listId, list->id);
|
|
|
|
|
if (DEBUG) {
|
|
|
|
|
printf("After ListStrCpy\n");
|
|
|
|
|
}
|
|
|
|
|
if ((strcmp(listHeadElemId, listId) == 0)
|
|
|
|
|
&& strcmp(listTailElemId, listId) == 0) {
|
|
|
|
|
if (DEBUG) {
|
|
|
|
|
printf("SpaceList : vide\n");
|
2004-02-26 07:19:08 +00:00
|
|
|
|
}
|
2020-03-03 23:06:43 +00:00
|
|
|
|
return 1;
|
|
|
|
|
} else {
|
|
|
|
|
bool found = false;
|
|
|
|
|
|
|
|
|
|
strcpy(prevElemId, list->headId);
|
|
|
|
|
strcpy(currElemId, list->headId);
|
|
|
|
|
while (!found) {
|
|
|
|
|
printf("Recherche dans l'element %s\n", listHeadElemId);
|
|
|
|
|
currElem = msgSpaceListElemOpen(currElemId);
|
|
|
|
|
if (currElem == NULL) {
|
|
|
|
|
NZG_ERROR("msgSpaceListElemOpen", currElemId);
|
|
|
|
|
goto ERROR;
|
|
|
|
|
}
|
|
|
|
|
strcpy(nextElemId, currElem->next);
|
|
|
|
|
strcpy(currSpaceId, currElem->spaceId);
|
|
|
|
|
if (msgSpaceListElemClose(currElem) < 0) {
|
|
|
|
|
NZG_ERROR("msgSpaceListElemClose", currElemId);
|
|
|
|
|
goto ERROR;
|
|
|
|
|
}
|
|
|
|
|
if (strcmp(prevElemId, nextElemId) == 0) {
|
|
|
|
|
// list <20> 1 seul <20>lement
|
|
|
|
|
if (strcmp(currSpaceId, spaceId) == 0) {
|
|
|
|
|
// on a trouv<75> l'elem
|
|
|
|
|
strcpy(list->headId, list->id);
|
|
|
|
|
strcpy(list->tailId, list->id);
|
|
|
|
|
// on efface
|
|
|
|
|
shm_unlink(currElemId);
|
|
|
|
|
found = true;
|
|
|
|
|
} else {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// liste <20> plusieurs <20>lements...
|
|
|
|
|
if (strcmp(currSpaceId, spaceId) == 0) {
|
|
|
|
|
// ca correspond
|
|
|
|
|
if (strcmp(prevElemId, currElemId) == 0) {
|
|
|
|
|
// si on est en d<>but de liste (prev=current)
|
|
|
|
|
// - la tete de liste pointe sur le suivant
|
|
|
|
|
strcpy(list->headId,
|
|
|
|
|
nextElemId);
|
|
|
|
|
} else {
|
|
|
|
|
if (strcmp
|
|
|
|
|
(currElemId,
|
|
|
|
|
nextElemId) == 0) {
|
|
|
|
|
// si on est en find de liste (current=next)
|
|
|
|
|
// - on fait pointer la queue de liste sur le pr<70>c<EFBFBD>dent
|
|
|
|
|
strcpy(list->tailId,
|
|
|
|
|
prevElemId);
|
|
|
|
|
// - on fait pointer le pr<70>c<EFBFBD>dent sur lui-meme
|
|
|
|
|
prevElem =
|
|
|
|
|
msgSpaceListElemOpen
|
|
|
|
|
(prevElemId);
|
|
|
|
|
strcpy(prevElem->next,
|
|
|
|
|
prevElemId);
|
|
|
|
|
msgSpaceListElemClose
|
|
|
|
|
(prevElem);
|
|
|
|
|
} else {
|
|
|
|
|
// on est en milieu de liste
|
|
|
|
|
// - on fait pointer le pr<70>c<EFBFBD>dent sur le suivant
|
|
|
|
|
prevElem =
|
|
|
|
|
msgSpaceListElemOpen
|
|
|
|
|
(prevElemId);
|
|
|
|
|
strcpy(prevElem->next,
|
|
|
|
|
nextElemId);
|
|
|
|
|
msgSpaceListElemClose
|
|
|
|
|
(prevElem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// - on d<>truit l'actuel
|
|
|
|
|
shm_unlink(currElemId);
|
|
|
|
|
found = true;
|
|
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
//cela ne correspond pas
|
|
|
|
|
//on recopie
|
|
|
|
|
strcpy(prevElemId, currElemId);
|
|
|
|
|
strcpy(currElemId, nextElemId);
|
|
|
|
|
}
|
2004-02-26 07:48:56 +00:00
|
|
|
|
}
|
2004-02-25 18:33:06 +00:00
|
|
|
|
|
2020-03-03 23:06:43 +00:00
|
|
|
|
}
|
|
|
|
|
if (msgSpaceListClose(list) < 0) {
|
|
|
|
|
NZG_ERROR("msgSpaceListClose", "");
|
|
|
|
|
goto ERROR;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
2004-02-26 07:19:08 +00:00
|
|
|
|
}
|
2020-03-03 23:06:43 +00:00
|
|
|
|
ERROR:
|
|
|
|
|
return -1;
|
2004-02-25 18:33:06 +00:00
|
|
|
|
}
|