示例#1
0
void
mm_io_c::skip(int64 num_bytes) {
  uint64_t pos = getFilePointer();
  setFilePointer(pos + num_bytes);
  if ((pos + num_bytes) != getFilePointer())
    throw mtx::mm_io::end_of_file_x();
}
uint32_t RelocationTable::read(BinaryInputFile* binaryInputFile){
    binaryInputFile->setInPointer(getFilePointer());

    uint32_t numberOfRelocations = sizeInBytes / relocationSize;
    for (uint32_t i = 0; i < numberOfRelocations; i++){
        if (elfFile->is64Bit() && type == ElfRelType_rel){
            relocations.append(new Relocation64(getFilePointer() + (i * Size__64_bit_Relocation), i));
        } else if (elfFile->is64Bit() && type == ElfRelType_rela){
            relocations.append(new RelocationAddend64(getFilePointer() + (i * Size__64_bit_Relocation_Addend), i));
        } else if (!elfFile->is64Bit() && type == ElfRelType_rel){
            relocations.append(new Relocation32(getFilePointer() + (i * Size__32_bit_Relocation), i));
        } else if (!elfFile->is64Bit() && type == ElfRelType_rela){
            relocations.append(new RelocationAddend32(getFilePointer() + (i * Size__32_bit_Relocation_Addend), i));
        } else {
            PRINT_ERROR("Relocation type %d is invalid", type);
        }

        relocations[i]->read(binaryInputFile);
    }
    ASSERT(relocations.size() == numberOfRelocations);

    verify();

    return sizeInBytes;
}
示例#3
0
void
mm_write_cache_io_c::setFilePointer(int64 offset,
                                    seek_mode mode) {
  int64_t new_pos
    = seek_beginning == mode ? offset
    : seek_end       == mode ? get_size()       - offset
    :                          getFilePointer() + offset;

  if (new_pos == static_cast<int64_t>(getFilePointer()))
    return;

  flush_cache();
  mm_proxy_io_c::setFilePointer(offset, mode);
}
示例#4
0
void
mm_io_c::save_pos(int64_t new_pos) {
  m_positions.push(getFilePointer());

  if (-1 != new_pos)
    setFilePointer(new_pos);
}
示例#5
0
void UncompressedStream::write(void* ptr, size_t size) {
    size_t result = fwrite(ptr, 1, size, getFilePointer());
    if (result != size)
        throw BagIOException((format("Error writing to file: writing %1% bytes, wrote %2% bytes") % size % result).str());

    advanceOffset(size);
}
示例#6
0
void UncompressedStream::read(void* ptr, size_t size) {
    size_t nUnused = (size_t) getUnusedLength();
    char* unused = getUnused();

    if (nUnused > 0) {
        // We have unused data from the last compressed read
        if (nUnused == size) {
            // Copy the unused data into the buffer
            memcpy(ptr, unused, nUnused);

            clearUnused();
        }
        else if (nUnused < size) {
            // Copy the unused data into the buffer
            memcpy(ptr, unused, nUnused);

            // Still have data to read
            size -= nUnused;

            // Read the remaining data from the file
            int result = fread((char*) ptr + nUnused, 1, size, getFilePointer());
            if ((size_t) result != size)
                throw BagIOException((format("Error reading from file + unused: wanted %1% bytes, read %2% bytes") % size % result).str());

            advanceOffset(size);

            clearUnused();
        }
        else {
            // nUnused_ > size
            memcpy(ptr, unused, size);

            setUnused(unused + size);
            setUnusedLength(nUnused - size);
        }
    }
    
    // No unused data - read from stream
    int result = fread(ptr, 1, size, getFilePointer());
    if ((size_t) result != size)
        throw BagIOException((format("Error reading from file: wanted %1% bytes, read %2% bytes") % size % result).str());

    advanceOffset(size);
}
uint32_t SymbolTable::read(BinaryInputFile* binaryInputFile){
    
    binaryInputFile->setInPointer(getFilePointer());
    setFileOffset(binaryInputFile->currentOffset());

    uint32_t totalBytesRead = 0;

    uint32_t numberOfSymbols = sizeInBytes / symbolSize;
    for (uint32_t i = 0; i < numberOfSymbols; i++){
        if (elfFile->is64Bit()){
            symbols.append(new Symbol64(this, getFilePointer() + (i * Size__64_bit_Symbol), i));
        } else {
            symbols.append(new Symbol32(this, getFilePointer() + (i * Size__32_bit_Symbol), i));
        }
        totalBytesRead += symbols[i]->read(binaryInputFile);
    }

    ASSERT(sizeInBytes == totalBytesRead && "size read from file does not match theorietical size of Symbol Table");
    return sizeInBytes;
}
示例#8
0
int64_t
mm_io_c::get_size() {
  if (-1 == m_cached_size) {
    save_pos();
    setFilePointer(0, seek_end);
    m_cached_size = getFilePointer();
    restore_pos();
  }

  return m_cached_size;
}
示例#9
0
void
mm_write_buffer_io_c::setFilePointer(int64 offset,
                                     seek_mode mode) {
  int64_t new_pos
    = seek_beginning == mode ? offset
    : seek_end       == mode ? m_proxy_io->get_size() - offset
    :                          getFilePointer()       + offset;

  if (new_pos == static_cast<int64_t>(getFilePointer()))
    return;

  flush_buffer();

  if (m_debug_seek) {
    int64_t previous_pos = mm_proxy_io_c::getFilePointer();
    mxdebug(boost::format("seek from %1% to %2% diff %3%\n") % previous_pos % new_pos % (new_pos - previous_pos));
  }

  mm_proxy_io_c::setFilePointer(offset, mode);
}
示例#10
0
void BZ2Stream::startRead() {
    bzfile_ = BZ2_bzReadOpen(&bzerror_, getFilePointer(), verbosity_, 0, getUnused(), getUnusedLength());

    switch (bzerror_) {
        case BZ_OK: break;
        default: {
            BZ2_bzReadClose(&bzerror_, bzfile_);
            throw BagException("Error opening file for reading compressed stream");
        }
    }

    clearUnused();
}
示例#11
0
void BZ2Stream::startWrite() {
    bzfile_ = BZ2_bzWriteOpen(&bzerror_, getFilePointer(), block_size_100k_, verbosity_, work_factor_);

    switch (bzerror_) {
        case BZ_OK: break;
        default: {
            BZ2_bzWriteClose(&bzerror_, bzfile_, 0, NULL, NULL);
            throw BagException("Error opening file for writing compressed stream");
        }
    }

    setCompressedIn(0);
}
示例#12
0
文件: IndexInput.cpp 项目: Afreeca/qt
  void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){
    if (len < bufferSize) {
      for (int32_t i = 0; i < len; ++i)		  // read byte-by-byte
        b[i] = readByte();
    } else {					  // read all-at-once
      int64_t start = getFilePointer();
      seekInternal(start);
      readInternal(b, len);

      bufferStart = start + len;		  // adjust stream variables
      bufferPosition = 0;
      bufferLength = 0;				  // trigger refill() on read
    }
  }
void RawSection::dump(BinaryOutputFile* binaryOutputFile, uint32_t offset){ 
    if (getType() != PebilClassType_RawSection && getType() != PebilClassType_no_type &&
        getType() != PebilClassType_DwarfSection && getType() != PebilClassType_DwarfLineInfoSection){
        PRINT_ERROR("You should implement the dump function for class type %d", getType());
    }

    
    if (getSectionHeader()->hasBitsInFile() && getSizeInBytes()){
        char* sectionOutput = getFilePointer();
        
        binaryOutputFile->copyBytes(sectionOutput, getSizeInBytes(), offset); 
        for (uint32_t i = 0; i < dataReferences.size(); i++){
            dataReferences[i]->dump(binaryOutputFile,offset);
        }
    }
}
示例#14
0
		/**
		* 读多个字节			 
		*/
		void CIndexInput::readBytes(byte* b,size_t len)
		{
			if (len < m_bufferSize)
			{
				for (size_t i = 0; i < len; i++)
					// read byte-by-byte
					b[i] = (byte) readByte();
			}
			else
			{
				// read all-at-once
				int64_t start = getFilePointer();
				seekInternal(start);
				readInternal((char*)b,len);

				m_bufferStart = start + len; // adjust stream variables
				m_bufferPosition = 0;
				m_bufferLength = 0; // trigger refill() on read
			}
		}
示例#15
0
/* The main function for running the ECG program. */
int runECG() {
	openFile();

	//printf("Peak nr.   Line        R peak\n");
	buffered_filtered_data = makeBuffer(SIZE_FILTERED_DATA);
	buffered_raw_data = makeBuffer(SIZE_RAW_DATA);
	buffered_LP_data = makeBuffer(SIZE_LP_DATA);
	buffered_HP_data = makeBuffer(SIZE_HP_DATA);
	buffered_derivative_square_data = makeBuffer(SIZE_DERIVATIVESQUARE_DATA);
	buffered_peak_lines = makeBuffer(SIZE_PEAKS);
	initQRS();
	while (getFilePointer() != EOF) {
		insert(&buffered_filtered_data, filter());
		detectPeaks();
		line++;
	}

	freeBuffers(&buffered_raw_data, &buffered_LP_data, &buffered_HP_data,
			&buffered_derivative_square_data, &buffered_filtered_data,
			&buffered_peak_lines);
	return 0;
}
示例#16
0
struct File *readFile(char* params){
	char** pointer;
	int len = getFilePointer(params,pointer);
	struct File *file;
	file = (struct File*)malloc(sizeof(struct File));
	file->filename = (char*)malloc(strLen(params));
	memCopy(params,file->filename,strLen(params));
	file->filesize = len;
	int i;
	struct StringListNode *line = (struct StringListNode*) malloc(sizeof(struct StringListNode));
	file->firstLine = line;
	line->prev = 0;
	line->next = 0;
	int lineStart = 0;
	// split the file into separate lines
	for(i = 0; i < len; i++){
		if((*pointer)[i] == '\n' || i == len-1){
			line->str = (char*) malloc(i-lineStart+2);
			memCopy((*pointer+lineStart), line->str, i-lineStart+1);
			(line->str)[i-lineStart+1] = 0;
			//set up the next line
			struct StringListNode *tline;
			tline = (struct StringListNode*) malloc(sizeof(struct StringListNode));
			tline->prev = line;
			line->next = tline;
			line = tline;
			lineStart = i+1;
		}
		if(i == len-1){
			//nix the next line, since there isn't one
			line = line->prev;
			free(line->next, sizeof(struct StringListNode));
			line->next = 0;
		}
	}
	return file;
}
示例#17
0
void MultiFileReader::setBufferPointer()
{
	m_llBufferPointer = getFilePointer();	
}