l3.libnazgul/src/spaceListAdd.c

57 lines
1.6 KiB
C
Raw Normal View History

2004-02-23 09:42:25 +00:00
#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
2004-02-25 17:54:51 +00:00
int msgSpaceListAdd(msgSpaceListElemId newElemId){
msgSpaceListElem * listOldTailElem;
msgSpaceListElem * listNewTailElem;
2004-02-25 22:30:43 +00:00
msgSpaceList * list;
2004-02-25 17:54:51 +00:00
list=msgSpaceListOpen();
2004-02-25 22:30:43 +00:00
if (list == NULL){
NZG_ERROR("msgSpaceListOpen","");
goto ERROR;
}
2004-02-25 17:54:51 +00:00
// on informe l'element qui est le dernier
listNewTailElem=msgSpaceListElemOpen(newElemId);
if (listNewTailElem==NULL){
2004-02-25 22:30:43 +00:00
NZG_ERROR("msgSpaceListElemOpen",newElemId);
goto ERROR;
2004-02-25 17:54:51 +00:00
}
2004-02-25 22:30:43 +00:00
strcpy(listNewTailElem->next,newElemId);
if (msgSpaceListElemClose(listNewTailElem) <0 ){
2004-02-25 18:33:06 +00:00
NZG_ERROR("msgSpaceListElemClose",newElemId);
2004-02-25 17:54:51 +00:00
goto ERROR;
}
2004-02-25 18:33:06 +00:00
/* verifier si la liste n'est pas vide... */
2004-02-25 17:54:51 +00:00
if((strcmp(list->headId,list->id)==0)
&& (strcmp(list->tailId,list->id)==0)) {
2004-02-25 22:30:43 +00:00
printf("- premier elem de spaceList -\n");
2004-02-25 17:54:51 +00:00
// on donne a la queue l'id de l'element
strcpy(list->headId,newElemId);
strcpy(list->tailId,newElemId);
} else {
/* on informe son pr<70>decesseur qu'il a un suivant */
listOldTailElem=msgSpaceListElemOpen(list->tailId);
if (listOldTailElem == NULL){
2004-02-25 18:33:06 +00:00
NZG_ERROR("msgSpaceListElemOpen",list->tailId);
2004-02-25 17:54:51 +00:00
goto ERROR;
}
strcpy(listOldTailElem->next,newElemId);
if (msgSpaceListElemClose(listOldTailElem) < 0){
2004-02-25 18:33:06 +00:00
NZG_ERROR("msgSpaceListElemClose",list->tailId);
2004-02-25 17:54:51 +00:00
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;
}