l3.libnazgul/src/bufferGetProcAttach.c

62 lines
1.4 KiB
C

#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;
}
}