]> git.donarmstrong.com Git - bamtools.git/commitdiff
Added cross-platform LFS for tell/seek. Removed fopen64/freopen64 - hopefully unecess...
authorDerek <derekwbarnett@gmail.com>
Mon, 19 Jul 2010 23:05:51 +0000 (19:05 -0400)
committerDerek <derekwbarnett@gmail.com>
Mon, 19 Jul 2010 23:05:51 +0000 (19:05 -0400)
BGZF.cpp
BGZF.h

index 1d185ba92d3f96e1139aa6b2935f6281ee9ea7ad..a9f2f5651cc2d714f2728bd700d72b95f8bffbc0 100644 (file)
--- a/BGZF.cpp
+++ b/BGZF.cpp
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 9 July 2010 (DB)\r
+// Last modified: 19 July 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // BGZF routines were adapted from the bgzf.c code developed at the Broad\r
 // Institute.\r
@@ -232,15 +232,18 @@ bool BgzfData::Open(const string& filename, const char* mode) {
     // stdin/stdout option contributed by Aaron Quinlan (2010-Jan-03)\r
     if ( (filename != "stdin") && (filename != "stdout") ) {\r
         // read/write BGZF data to/from a file\r
-        Stream = fopen64(filename.c_str(), mode);\r
+//         Stream = fopen64(filename.c_str(), mode);\r
+        Stream = fopen(filename.c_str(), mode);\r
     }\r
     else if ( (filename == "stdin") && (strcmp(mode, "rb") == 0 ) ) { \r
         // read BGZF data from stdin\r
-        Stream = freopen64(NULL, mode, stdin);\r
+//         Stream = freopen64(NULL, mode, stdin);\r
+        Stream = freopen(NULL, mode, stdin);\r
     }\r
     else if ( (filename == "stdout") && (strcmp(mode, "wb") == 0) ) { \r
         // write BGZF data to stdout\r
-        Stream = freopen64(NULL, mode, stdout);\r
+//         Stream = freopen64(NULL, mode, stdout);\r
+        Stream = freopen(NULL, mode, stdout);\r
     }\r
 \r
     if(!Stream) {\r
@@ -279,7 +282,7 @@ int BgzfData::Read(char* data, const unsigned int dataLength) {
    }\r
 \r
    if ( BlockOffset == BlockLength ) {\r
-       BlockAddress = ftello(Stream);\r
+       BlockAddress = ftell64(Stream);\r
        BlockOffset  = 0;\r
        BlockLength  = 0;\r
    }\r
@@ -291,7 +294,7 @@ int BgzfData::Read(char* data, const unsigned int dataLength) {
 bool BgzfData::ReadBlock(void) {\r
 \r
     char    header[BLOCK_HEADER_LENGTH];\r
-    int64_t blockAddress = ftello(Stream);\r
+    int64_t blockAddress = ftell64(Stream);\r
     \r
     int count = fread(header, 1, sizeof(header), Stream);\r
     if (count == 0) {\r
@@ -340,7 +343,7 @@ bool BgzfData::Seek(int64_t position) {
     int     blockOffset  = (position & 0xFFFF);\r
     int64_t blockAddress = (position >> 16) & 0xFFFFFFFFFFFFLL;\r
 \r
-    if (fseeko(Stream, blockAddress, SEEK_SET) != 0) {\r
+    if (fseek64(Stream, blockAddress, SEEK_SET) != 0) {\r
         printf("BGZF ERROR: unable to seek in file\n");\r
         return false;\r
     }\r
diff --git a/BGZF.h b/BGZF.h
index 5904fe5f2ff25acee256f4f84a1759835e48f46b..303684e148dddc1c45d5921f2b7f38de2b405cd4 100644 (file)
--- a/BGZF.h
+++ b/BGZF.h
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College\r
 // All rights reserved.\r
 // ---------------------------------------------------------------------------\r
-// Last modified: 9 July 2010 (DB)\r
+// Last modified: 19 July 2010 (DB)\r
 // ---------------------------------------------------------------------------\r
 // BGZF routines were adapted from the bgzf.c code developed at the Broad\r
 // Institute.\r
 // zlib includes\r
 #include "zlib.h"\r
 \r
+// Platform-specific large-file support\r
+#ifndef BAMTOOLS_LFS\r
+#define BAMTOOLS_LFS\r
+    #ifdef WIN32\r
+        #define ftell64(a)     _ftelli64(a)\r
+        #define fseek64(a,b,c) _fseeki64(a,b,c)\r
+    #else\r
+        #define ftell64(a)     ftello(a)\r
+        #define fseek64(a,b,c) fseeko(a,b,c) \r
+    #endif\r
+#endif // BAMTOOLS_LFS\r
+\r
 // Platform-specific type definitions\r
 #ifndef BAMTOOLS_TYPES\r
 #define BAMTOOLS_TYPES\r