Commit: 7ba82f3f0a848aedcc0f3b3f73a429f740792dbe
Author: Campbell Barton
Date:   Tue Mar 19 20:04:23 2019 +1100
Branches: master
https://developer.blender.org/rB7ba82f3f0a848aedcc0f3b3f73a429f740792dbe

Fix T62707: opening blend files over 2gb on win32 fails

Regression in 358e07f447e9ed7 for ms-windows since off_t is an int32_t
even on 64bit systems causing files over 2gb not to load.

Poison off_t so this doesn't happen again.

===================================================================

M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/readfile.h

===================================================================

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 93ef7fe5b73..b8131c8abbb 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -264,7 +264,7 @@ typedef struct BHeadN {
        struct BHeadN *next, *prev;
 #ifdef USE_BHEAD_READ_ON_DEMAND
        /** Use to read the data from the file directly into memory as needed. 
*/
-       off_t file_offset;
+       off64_t file_offset;
        /** When set, the remainder of this allocation is the data, otherwise 
it needs to be read. */
        bool has_data;
 #endif
@@ -838,7 +838,7 @@ static BHeadN *get_bhead(FileData *fd)
                                        new_bhead->file_offset = 
fd->file_offset;
                                        new_bhead->has_data = false;
                                        new_bhead->bhead = bhead;
-                                       off_t seek_new = fd->seek(fd, 
bhead.len, SEEK_CUR);
+                                       off64_t seek_new = fd->seek(fd, 
bhead.len, SEEK_CUR);
                                        if (seek_new == -1) {
                                                fd->is_eof = true;
                                                MEM_freeN(new_bhead);
@@ -946,7 +946,7 @@ static bool blo_bhead_read_data(FileData *fd, BHead 
*thisblock, void *buf)
        bool success = true;
        BHeadN *new_bhead = BHEADN_FROM_BHEAD(thisblock);
        BLI_assert(new_bhead->has_data == false && new_bhead->file_offset != 0);
-       off_t offset_backup = fd->file_offset;
+       off64_t offset_backup = fd->file_offset;
        if (UNLIKELY(fd->seek(fd, new_bhead->file_offset, SEEK_SET) == -1)) {
                success = false;
        }
@@ -1136,7 +1136,7 @@ static int fd_read_data_from_file(FileData *filedata, 
void *buffer, uint size)
        return (readsize);
 }
 
-static off_t fd_seek_data_from_file(FileData *filedata, off_t offset, int 
whence)
+static off64_t fd_seek_data_from_file(FileData *filedata, off64_t offset, int 
whence)
 {
        filedata->file_offset = lseek(filedata->filedes, offset, whence);
        return filedata->file_offset;
diff --git a/source/blender/blenloader/intern/readfile.h 
b/source/blender/blenloader/intern/readfile.h
index 9e970b9ae5d..a1af4bfad16 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -48,10 +48,17 @@ enum eFileDataFlag {
        FD_FLAGS_NOT_MY_LIBMAP         = 1 << 5,
 };
 
+/* Disallow since it's 32bit on ms-windows. */
+#ifdef __GNUC__
+#  pragma GCC poison off_t
+#endif
 
+#if defined(_MSC_VER)
+typedef int64_t off64_t;
+#endif
 
 typedef int (FileDataReadFn)(struct FileData *filedata, void *buffer, unsigned 
int size);
-typedef off_t (FileDataSeekFn)(struct FileData *filedata, off_t offset, int 
whence);
+typedef off64_t (FileDataSeekFn)(struct FileData *filedata, off64_t offset, 
int whence);
 
 typedef struct FileData {
        /** Linked list of BHeadN's. */
@@ -59,7 +66,7 @@ typedef struct FileData {
        enum eFileDataFlag flags;
        bool is_eof;
        int buffersize;
-       off_t file_offset;
+       int64_t file_offset;
 
        FileDataReadFn *read;
        FileDataSeekFn *seek;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to