#include "libnazgul.h"

int msgBufferDetachProc(
	msgPoolData * poolDataTabAddr,
	int poolIndex,
	int bufferIndex,
	void * addr
	){
  msgBufferInfoTabId bufferInfoTabId;
  int bufferInfoTabFd;
  msgBufferInfo * bufferInfoTabAddr;
  int bufferInfoNb;  

  printf("Detaching %d,%d\n",poolIndex,bufferIndex);
  //récuperer l'ID du BufferInfoTab;
  strcpy(bufferInfoTabId, poolDataTabAddr[poolIndex].bufferInfoTabId);

  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 **/
  bufferInfoNb=poolDataTabAddr[poolIndex].bufferNb;
  bufferInfoTabAddr=mmap(NULL,bufferInfoNb*sizeof(msgBufferInfo),
	  PROT_READ|PROT_WRITE,MAP_SHARED,bufferInfoTabFd,(off_t)0);

  bufferInfoTabAddr[bufferIndex].ownerPid = (pid_t)-1;
  bufferInfoTabAddr[bufferIndex].addr = NULL;

  if (munmap(bufferInfoTabAddr,bufferInfoNb*sizeof(msgBufferInfo))< 0)
  {	
	NZG_ERROR("munmap",bufferInfoTabId);
	return -1; 
  }

  return 0;
}