void SAMReader::readHeader( const char* fileName, ReaderContext& context) { DataReader* data = DataSupplier::Default[false]->getDataReader(maxLineLen); if (! data->init(fileName)) { fprintf(stderr, "Unable to read file %s\n", fileName); soft_exit(1); } // todo: allow for larger headers _int64 headerSize = 1024 * 1024; // 1M header max char* buffer = data->readHeader(&headerSize); if (!parseHeader(fileName, buffer, buffer + headerSize, context.genome, &headerSize, &context.headerMatchesIndex)) { fprintf(stderr,"SAMReader: failed to parse header on '%s'\n",fileName); soft_exit(1); } _ASSERT(context.header == NULL); char* p = new char[headerSize + 1]; memcpy(p, buffer, headerSize); p[headerSize] = 0; context.header = p; context.headerBytes = context.headerLength = headerSize; delete data; }