From: Derek Date: Fri, 9 Jul 2010 16:04:07 +0000 (-0400) Subject: Enforced proper handling of large files (>4Gb) on 32-bit systems. X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=78a223dbe7949c65cfc16d972ef84f4a62351fc7;p=bamtools.git Enforced proper handling of large files (>4Gb) on 32-bit systems. --- diff --git a/BGZF.cpp b/BGZF.cpp index 5aeb26a..1d185ba 100644 --- a/BGZF.cpp +++ b/BGZF.cpp @@ -3,7 +3,7 @@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 11 January 2010 (DB) +// Last modified: 9 July 2010 (DB) // --------------------------------------------------------------------------- // BGZF routines were adapted from the bgzf.c code developed at the Broad // Institute. @@ -232,15 +232,15 @@ bool BgzfData::Open(const string& filename, const char* mode) { // stdin/stdout option contributed by Aaron Quinlan (2010-Jan-03) if ( (filename != "stdin") && (filename != "stdout") ) { // read/write BGZF data to/from a file - Stream = fopen(filename.c_str(), mode); + Stream = fopen64(filename.c_str(), mode); } else if ( (filename == "stdin") && (strcmp(mode, "rb") == 0 ) ) { // read BGZF data from stdin - Stream = freopen(NULL, mode, stdin); + Stream = freopen64(NULL, mode, stdin); } else if ( (filename == "stdout") && (strcmp(mode, "wb") == 0) ) { // write BGZF data to stdout - Stream = freopen(NULL, mode, stdout); + Stream = freopen64(NULL, mode, stdout); } if(!Stream) { @@ -279,7 +279,7 @@ int BgzfData::Read(char* data, const unsigned int dataLength) { } if ( BlockOffset == BlockLength ) { - BlockAddress = ftell(Stream); + BlockAddress = ftello(Stream); BlockOffset = 0; BlockLength = 0; } @@ -291,8 +291,8 @@ int BgzfData::Read(char* data, const unsigned int dataLength) { bool BgzfData::ReadBlock(void) { char header[BLOCK_HEADER_LENGTH]; - int64_t blockAddress = ftell(Stream); - + int64_t blockAddress = ftello(Stream); + int count = fread(header, 1, sizeof(header), Stream); if (count == 0) { BlockLength = 0; @@ -340,7 +340,7 @@ bool BgzfData::Seek(int64_t position) { int blockOffset = (position & 0xFFFF); int64_t blockAddress = (position >> 16) & 0xFFFFFFFFFFFFLL; - if (fseek(Stream, blockAddress, SEEK_SET) != 0) { + if (fseeko(Stream, blockAddress, SEEK_SET) != 0) { printf("BGZF ERROR: unable to seek in file\n"); return false; } diff --git a/BGZF.h b/BGZF.h index 29d6d14..5904fe5 100644 --- a/BGZF.h +++ b/BGZF.h @@ -3,7 +3,7 @@ // Marth Lab, Department of Biology, Boston College // All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 22 June 2010 (DB) +// Last modified: 9 July 2010 (DB) // --------------------------------------------------------------------------- // BGZF routines were adapted from the bgzf.c code developed at the Broad // Institute. @@ -90,7 +90,7 @@ struct BgzfData { // closes BGZF file void Close(void); - // opens the BGZF file for reading (mode is either "rb" for reading, or "wb" for writing + // opens the BGZF file (mode is either "rb" for reading, or "wb" for writing) bool Open(const std::string& filename, const char* mode); // reads BGZF data into a byte buffer int Read(char* data, const unsigned int dataLength); diff --git a/Makefile b/Makefile index ee9be97..01405ca 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,23 @@ CXX= g++ -CXXFLAGS= -Wall -O3 +CXXFLAGS= -Wall -O3 -D_FILE_OFFSET_BITS=64 PROG= bamtools -API= BGZF.o BamReader.o BamWriter.o BamMultiReader.o -UTILS= bamtools_options.o bamtools_utilities.o -TOOLKIT= bamtools_convert.o bamtools_count.o bamtools_coverage.o bamtools_filter.o bamtools_header.o bamtools_index.o bamtools_merge.o bamtools_sam.o bamtools_sort.o bamtools_stats.o +API= BGZF.o \ + BamIndex.o \ + BamReader.o \ + BamWriter.o \ + BamMultiReader.o +UTILS= bamtools_options.o \ + bamtools_utilities.o +TOOLKIT= bamtools_convert.o \ + bamtools_count.o \ + bamtools_coverage.o \ + bamtools_filter.o \ + bamtools_header.o \ + bamtools_index.o \ + bamtools_merge.o \ + bamtools_sam.o \ + bamtools_sort.o \ + bamtools_stats.o MAIN= bamtools.o OBJS= $(API) $(UTILS) $(TOOLKIT) $(MAIN) LIBS= -lz @@ -11,7 +25,7 @@ LIBS= -lz all: $(PROG) bamtools: $(OBJS) - $(CXX) $(CXXFLAGS) -o $@ $(OBJS) $(LIBS) + $(CXX) $(CXXFLAGS) -o $@ $(OBJS) $(LIBS) clean: rm -fr gmon.out *.o *.a a.out *~