diff options
author | Christophe Grenier <[email protected]> | 2014-10-04 18:09:48 +0200 |
---|---|---|
committer | Christophe Grenier <[email protected]> | 2014-10-04 18:09:48 +0200 |
commit | c28950032981dafb83ec5c568a16e030c4467226 (patch) | |
tree | 05156e7f64df839808af64cd455c8b864a1eda18 /src/file_doc.c | |
parent | 4c5fcd4164b7fd06eafa54fa44ecfb9fb2d02d00 (diff) |
Use fseeko() instead of fseek().
Fix 2GB per file limit on Windows for some file types.
Diffstat (limited to 'src/file_doc.c')
-rw-r--r-- | src/file_doc.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/file_doc.c b/src/file_doc.c index 395b3305..ad71f106 100644 --- a/src/file_doc.c +++ b/src/file_doc.c @@ -84,7 +84,12 @@ static void file_check_doc(file_recovery_t *file_recovery) const uint64_t doc_file_size_org=file_recovery->file_size; file_recovery->file_size=0; /*reads first sector including OLE header */ - if(fseek(file_recovery->handle, 0, SEEK_SET) < 0 || + if( +#ifdef HAVE_FSEEKO + fseeko(file_recovery->handle, 0, SEEK_SET) < 0 || +#else + fseek(file_recovery->handle, 0, SEEK_SET) < 0 || +#endif fread(&buffer_header, sizeof(buffer_header), 1, file_recovery->handle) != 1) return ; #ifdef DEBUG_OLE @@ -149,7 +154,11 @@ static void file_check_doc(file_recovery_t *file_recovery) free(fat); return ; } +#ifdef HAVE_FSEEKO + if(fseeko(file_recovery->handle, (1+block)<<le16(header->uSectorShift), SEEK_SET)<0) +#else if(fseek(file_recovery->handle, (1+block)<<le16(header->uSectorShift), SEEK_SET)<0) +#endif { #ifdef DEBUG_OLE log_info("fseek failed\n"); @@ -497,7 +506,11 @@ static uint32_t *OLE_load_FAT(FILE *IN, const struct OLE_HDR *header) i<le32(header->num_extra_FAT_blocks) && block!=0xFFFFFFFF && block!=0xFFFFFFFE; i++, block=le32(dif[109+i*(((1<<le16(header->uSectorShift))/4)-1)])) { +#ifdef HAVE_FSEEKO + if(fseeko(IN, (1+block)<<le16(header->uSectorShift), SEEK_SET) < 0) +#else if(fseek(IN, (1+block)<<le16(header->uSectorShift), SEEK_SET) < 0) +#endif { free(dif); return NULL; @@ -518,7 +531,11 @@ static uint32_t *OLE_load_FAT(FILE *IN, const struct OLE_HDR *header) j<le32(header->num_FAT_blocks); j++, data+=(1<<le16(header->uSectorShift))) { +#ifdef HAVE_FSEEKO + if(fseeko(IN, (1+le32(dif[j]))<<le16(header->uSectorShift), SEEK_SET)<0) +#else if(fseek(IN, (1+le32(dif[j]))<<le16(header->uSectorShift), SEEK_SET)<0) +#endif { free(dif); free(fat); @@ -553,7 +570,11 @@ static void *OLE_read_stream(FILE *IN, free(dataPt); return NULL; } +#ifdef HAVE_FSEEKO + if(fseeko(IN, (1+block)<<uSectorShift, SEEK_SET)<0) +#else if(fseek(IN, (1+block)<<uSectorShift, SEEK_SET)<0) +#endif { free(dataPt); return NULL; @@ -580,7 +601,11 @@ static uint32_t *OLE_load_MiniFAT(FILE *IN, const struct OLE_HDR *header, const block=le32(header->MiniFat_block); for(i=0; i < le32(header->csectMiniFat) && block < fat_entries; i++) { +#ifdef HAVE_FSEEKO + if(fseeko(IN, ((uint64_t)1+block) << le16(header->uSectorShift), SEEK_SET) < 0) +#else if(fseek(IN, ((uint64_t)1+block) << le16(header->uSectorShift), SEEK_SET) < 0) +#endif { free(minifat); return NULL; @@ -840,7 +865,12 @@ static void file_rename_doc(const char *old_filename) log_info("file_rename_doc(%s)\n", old_filename); #endif /*reads first sector including OLE header */ - if(fseek(file, 0, SEEK_SET) < 0 || + if( +#ifdef HAVE_FSEEKO + fseeko(file, 0, SEEK_SET) < 0 || +#else + fseek(file, 0, SEEK_SET) < 0 || +#endif fread(&buffer_header, sizeof(buffer_header), 1, file) != 1) { fclose(file); @@ -877,7 +907,11 @@ static void file_rename_doc(const char *old_filename) block=le32(fat[block]), i++) { struct OLE_DIR *dir_entries; +#ifdef HAVE_FSEEKO + if(fseeko(file, (1+block)<<le16(header->uSectorShift), SEEK_SET)<0) +#else if(fseek(file, (1+block)<<le16(header->uSectorShift), SEEK_SET)<0) +#endif { free(fat); fclose(file); |