l3.libnazgul/src/spaceListAdd.c
2004-02-25 22:30:43 +00:00

57 lines
1.6 KiB
C

#include "libnazgul.h"
// ajoute un element en début de liste.
// fait pointer l'ancien dernier vers lui
// il s'enregistre en tant que dernier chez la liste
int msgSpaceListAdd(msgSpaceListElemId newElemId){
msgSpaceListElem * listOldTailElem;
msgSpaceListElem * listNewTailElem;
msgSpaceList * list;
list=msgSpaceListOpen();
if (list == NULL){
NZG_ERROR("msgSpaceListOpen","");
goto ERROR;
}
// on informe l'element qui est le dernier
listNewTailElem=msgSpaceListElemOpen(newElemId);
if (listNewTailElem==NULL){
NZG_ERROR("msgSpaceListElemOpen",newElemId);
goto ERROR;
}
strcpy(listNewTailElem->next,newElemId);
if (msgSpaceListElemClose(listNewTailElem) <0 ){
NZG_ERROR("msgSpaceListElemClose",newElemId);
goto ERROR;
}
/* verifier si la liste n'est pas vide... */
if((strcmp(list->headId,list->id)==0)
&& (strcmp(list->tailId,list->id)==0)) {
printf("- premier elem de spaceList -\n");
// on donne a la queue l'id de l'element
strcpy(list->headId,newElemId);
strcpy(list->tailId,newElemId);
} else {
/* on informe son prédecesseur qu'il a un suivant */
listOldTailElem=msgSpaceListElemOpen(list->tailId);
if (listOldTailElem == NULL){
NZG_ERROR("msgSpaceListElemOpen",list->tailId);
goto ERROR;
}
strcpy(listOldTailElem->next,newElemId);
if (msgSpaceListElemClose(listOldTailElem) < 0){
NZG_ERROR("msgSpaceListElemClose",list->tailId);
goto ERROR;
}
// on donne a la queue l'id du dernier element
strcpy(list->tailId,newElemId);
}
// on incremente elemCounter
msgSpaceListClose(list);
return 0;
ERROR:
return -1;
}