#include "libnazgul.h" #define DEBUG 1 int msgSpaceListRem(msgSpaceId spaceId){ msgSpaceList * list; msgSpaceListElemId listHeadElemId; msgSpaceListElemId listTailElemId; msgSpaceListId listId; list=msgSpaceListOpen(); if (list==NULL){ NZG_ERROR("msgSpaceListOpen",""); goto ERROR; } 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 (msgSpaceListClose(list) < 0){ NZG_ERROR("msgSpaceListClose",""); goto ERROR; } if ((strcmp(listHeadElemId,listId)==0) && strcmp(listTailElemId,listId)==0){ if (DEBUG) { printf("SpaceList : vide\n"); } return 1; } else { printf("RechercheRem dans l'element %s\n",listHeadElemId); return msgSpaceListElemRem(listHeadElemId,spaceId); } ERROR: return -1; } int msgSpaceListElemRem(msgSpaceListElemId elemId,msgSpaceId spaceId){ msgSpaceListElem * listElem; msgSpaceListElemId listElemIdNext; msgSpaceId currentElemSpaceId; listElem=msgSpaceListElemOpen(elemId); if (listElem==NULL){ NZG_ERROR("msgSpaceListElemOpen",elemId); goto ERROR; } strcpy(listElemIdNext,listElem->next); strcpy(currentElemSpaceId,listElem->spaceId); printf("Current ListElem: Next:%s, Sid:%s\n", listElemIdNext,currentElemSpaceId); if (msgSpaceListElemClose(listElem) <0){ NZG_ERROR("msgSpaceListElemClose",elemId); goto ERROR; } printf("comparisons...\n"); if (strcmp(listElemIdNext,elemId)==0){ //on a rien trouvé avant et on est au bout return -1; } else { msgSpaceListElem * listElemNext; msgSpaceListElemId spaceIdNext; listElemNext=msgSpaceListElemOpen(listElemIdNext); strcpy(spaceIdNext,listElemNext->spaceId); strcpy(listElemIdNextNext,listElemNext->next); msgSpaceListElemClose(listElemNext); if (strcmp(spaceIdNext,spaceId)==0) { printf("Found/Rem %s in spaceList !\n",spaceId); // l'element suivant correspond // on ouvre l'elem courant // si l'id(nextnext) == id(next) alors on met notre propre id // sinon on met notre propre id dans next // on unlinke l'ancien suivant return 0; } else { return msgSpaceListElemRem(listElemIdNext,spaceId); } } return 0; ERROR: return -1; }