58 lines
1.6 KiB
C
58 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;
|
|
|
|
}
|