mirror of
https://github.com/taglib/taglib.git
synced 2025-08-01 20:04:32 -04:00
Support large files over 2GB on Windows (#1089)
Backport of4dcf0b41c6
b01f45e141
https://github.com/taglib/taglib/pull/77 Tested with files larger than 2GB which have been created using sox -n -r 44100 -C 320 large.mp3 synth 58916 sine 440 channels 2 sox -n -r 44100 -C 0 large.flac synth 25459 sine 440 channels 2 sox -n -r 44100 -C 10 large.ogg synth 229806 sine 440 channels 2 sox -n -r 44100 large.wav synth 6692 sine 440 channels 2 ffmpeg -f lavfi -i "sine=frequency=440:duration=244676" -y large.m4a The only file which was readable with the tagreader example before this commit was large.ogg. The problem is that long on Windows is only 32-bit (also in LLP64 data model of 64-bit compilation target) and all the file offsets using long are too small for large files. Now long is replaced by offset_t (defined to be long long on Windows and off_t on UNIX) for such cases and some unsigned long are now size_t, which has the correct size even on Windows.
This commit is contained in:
@ -162,7 +162,7 @@ bool IT::File::save()
|
||||
if(!readU16L(special))
|
||||
return false;
|
||||
|
||||
unsigned long fileSize = File::length();
|
||||
unsigned long fileSize = static_cast<unsigned long>(File::length());
|
||||
if(special & Properties::MessageAttached) {
|
||||
seek(54);
|
||||
if(!readU16L(messageLength) || !readU32L(messageOffset))
|
||||
|
Reference in New Issue
Block a user