#include "libnazgul.h" int msgBufferGetProcAttach(msgPoolData * poolDataTabAddr, int poolNb, int *poolIndex, int *bufferIndex, void *addr) { msgBufferInfoTabId bufferInfoTabId; int bufferInfoTabFd; msgBufferInfo *bufferInfoTabAddr; int bufferInfoNb; bool found = false; int pIdx = 0; int bIdx; while ((!found) && (pIdx < poolNb)) { /* Pour chaque pool */ //récuperer l'ID du BufferInfoTab; strcpy(bufferInfoTabId, poolDataTabAddr[pIdx].bufferInfoTabId); bufferInfoNb = poolDataTabAddr[pIdx].bufferNb; bufferInfoTabFd = shm_open(bufferInfoTabId, O_RDWR, SHM_DEFAULT_MODE); if (bufferInfoTabFd < 0) { NZG_ERROR("shm_open", bufferInfoTabId); return -1; } /** on regarde dans le tableau d'infos de buffer **/ bufferInfoTabAddr = mmap(NULL, bufferInfoNb * sizeof(msgBufferInfo), PROT_READ, MAP_SHARED, bufferInfoTabFd, (off_t) 0); /* on cherche dans chacun des buffers */ bIdx = 0; while ((!found) && bIdx < bufferInfoNb) { if (bufferInfoTabAddr[bIdx].addr == addr) { found = true; (*bufferIndex) = bIdx; }; bIdx++; } if (found) { (*poolIndex) = pIdx; } /* on détache le morceau de mémoire */ if (munmap (bufferInfoTabAddr, bufferInfoNb * sizeof(msgBufferInfo)) < 0) { NZG_ERROR("munmap", bufferInfoTabId); return -1; } close(bufferInfoTabFd); pIdx++; } if (found) { return 0; } else { return -1; } }