62 lines
1.4 KiB
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;
|
|
}
|
|
}
|