#include "libnazgul.h" #include "ids.h" int msgSpaceListInit() { int spaceListFd; sem_t *spaceListSemFd; msgSpaceList *list; msgSpaceListSemId spaceListSemId; msgSpaceListId spaceListId; strcpy(spaceListSemId, DEFAULT_MSGSPACELISTSEMID); strcpy(spaceListId, DEFAULT_MSGSPACELISTID); /* Creation de semaphore */ spaceListSemFd = sem_open(spaceListSemId, O_CREAT | O_EXCL, 0666, 0); if (spaceListSemFd == SEM_FAILED) { spaceListSemFd = sem_open(spaceListSemId, O_CREAT, 0666, 0); if (spaceListSemFd == SEM_FAILED) { NZG_ERROR("sem_open", spaceListSemId); goto ERROR; } } /*Fait un segment de memoir partager sur espace de listelement */ spaceListFd = shm_open(spaceListId, O_RDWR | O_CREAT | O_EXCL | O_TRUNC, 0666); if (spaceListFd == -1) { spaceListFd = shm_open(spaceListId, O_RDWR, 0666); if (spaceListFd == -1) { NZG_ERROR("shm_open", spaceListId); goto ERROR; } else { close(spaceListFd); goto EXISTING; } } if (ftruncate(spaceListFd, sizeof(msgSpaceList)) < 0) { NZG_ERROR("ftruncate", spaceListId); goto ERROR; } close(spaceListFd); list = msgSpaceListOpen(); if (list == NULL) { NZG_ERROR("msgSpaceListOpen", ""); goto ERROR; } strcpy(list->id, spaceListId); strcpy(list->headId, spaceListId); strcpy(list->tailId, spaceListId); if (msgSpaceListClose(list) < 0) { NZG_ERROR("msgSpaceListClose", ""); goto ERROR; } if (msgSpaceListUnlock() < 0) { NZG_ERROR("msgSpaceListUnlock", ""); goto ERROR; } return 0; ERROR: return -1; EXISTING: if (msgSpaceListUnlock() < 0) { NZG_ERROR("msgSpaceListUnlock", ""); goto ERROR; } return 0; };