SharedMemoryManager::~SharedMemoryManager()
 {
   if(m_memory_created)
   {
     destroyMemory(m_interface_name);
   }
 }
예제 #2
0
void destroyOne (pulsar *psr)
{
  int i = 0;

  if (psr->obsn)
    free (psr->obsn);

  if (psr->covar) {
    for(i=0;i<MAX_PARAMS;i++)
      free (psr->covar[i]);
    free (psr->covar);
  }
  
  destroyMemory(psr);
}
예제 #3
0
void destroyOne (pulsar *psr)
{
    if (psr->obsn)
        free (psr->obsn);

    free_blas(psr->covar);

     for (int k=0; k < MAX_PARAMS; ++k){
        if(psr->constraint_special[k]){
            free(psr->constraint_special[k]);
        }
    }


    destroyMemory(psr);
}
예제 #4
0
파일: rom.c 프로젝트: BlockoS/Etripator
/**
 * Load ROM from file.
 * \param [in]  filename ROM filename.
 * \param [out] memmap   Memory map.
 * \return 1 upon success, 0 if an error occured.
 */
int loadROM(const char* filename, MemoryMap* memmap)
{
    FILE   *in;
    size_t size;
    size_t count, nRead;
    
    /* Open file */
    in = fopen(filename, "rb");
    if(NULL == in)
    {
        ERROR_MSG("Unable to open %s : %s", filename, strerror(errno));
        return 0;
    }

    /* Compute file size. */
    fseek(in, 0, SEEK_END);
    size  = ftell(in);
    fseek(in, 0, SEEK_SET);
    size -= ftell(in);

    /* Check size */
    if(0 == size)
    {
        ERROR_MSG("Empty file: %s", filename);
        goto err_0;
    }

    /* Check for possible header */
    if(size & 0x200)
    {
        /* Jump header */
        size &= ~0x200;
        if(fseek(in, 0x200, SEEK_SET))
        {
            ERROR_MSG("Failed to jump rom header in %s: %s", filename, strerror(errno));
            goto err_0;
        }
    }

    /* Allocate rom storage */
    if(0 == createMemory(&memmap->rom, (size + 0x1fff) & ~0x1fff))
    {
        ERROR_MSG("Failed to allocate ROM storage : %s", strerror(errno));
        goto err_0;
    }
    /* Fill rom with 0xff */
    memset(memmap->rom.data, 0xff, memmap->rom.len);
    
    /* Read ROM data */
    count = (size < memmap->rom.len) ? size : memmap->rom.len;
    nRead = fread(memmap->rom.data, 1, count, in);
    if(nRead != count)
    {
        ERROR_MSG("Failed to read ROM data from %s : %s", filename, strerror(errno));
        goto err_1;
    }
    fclose(in);

    /* Initialize ROM pages (from mednafen source code). */
    /* Note : the decrement by (i*8192) is a trick to avoid doing a 
     *        bitwise with the address when reading a byte from that
     *        page. */
    if(0x60000 == memmap->rom.len)
    {
        int i;
        for(i=0; i<64; i++)
        {
            memmap->page[i] = &memmap->rom.data[(i & 0x1f) * 8192] - (i*8192);
        }
        for(i=64; i<128; i++)
        {
            memmap->page[i] = &memmap->rom.data[((i & 0x0f) + 32) * 8192] - (i*8192);
        }
    }
    else if(0x80000 == memmap->rom.len)
    {
        int i;
        for(i=0; i<64; i++)
        {
            memmap->page[i] = &memmap->rom.data[(i & 0x3f) * 8192] - (i*8192);
        }
        for(i=64; i<128; i++)
        {
            memmap->page[i] = &memmap->rom.data[((i & 0x1f) + 32) * 8192] - (i*8192);
        }
    }
    else
    {
        int i;
        for(i=0; i<128; i++)
        {
            uint8_t bank = i % (memmap->rom.len / 8192);
            memmap->page[i] = &memmap->rom.data[bank * 8192] - (i*8192);
        }
    }

    return 1;

err_1:
    destroyMemory(&memmap->rom);
err_0:
    fclose(in);
    return 0;
}