diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index b44613d1ce..66aee53a0e 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -22668,7 +22668,12 @@ void AudioThumbnail::setLevels (const MinMaxValue* const* values, int thumbIndex for (int i = jmin (numChans, channels.size()); --i >= 0;) channels.getUnchecked(i)->write (values[i], thumbIndex, numValues); - numSamplesFinished = jmax (numSamplesFinished, (thumbIndex + numValues) * (int64) samplesPerThumbSample); + const int64 start = thumbIndex * (int64) samplesPerThumbSample; + const int64 end = (thumbIndex + numValues) * (int64) samplesPerThumbSample; + + if (numSamplesFinished >= start && end > numSamplesFinished) + numSamplesFinished = end; + totalSamples = jmax (numSamplesFinished, totalSamples); window->invalidate(); sendChangeMessage(); @@ -244735,8 +244740,8 @@ void FileOutputStream::flushInternal() MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode) : address (nullptr), - internal (nullptr), - length (0) + length (0), + fileHandle (nullptr) { jassert (mode == readOnly || mode == readWrite); @@ -244754,10 +244759,9 @@ MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMo HANDLE h = CreateFile (file.getFullPathName().toWideCharPointer(), accessMode, FILE_SHARE_READ, 0, createType, FILE_ATTRIBUTE_NORMAL, 0); - internal = (void*) h; - if (h != INVALID_HANDLE_VALUE) { + fileHandle = (void*) h; const int64 fileSize = file.getSize(); HANDLE mappingHandle = CreateFileMapping (h, 0, protect, (DWORD) (fileSize >> 32), (DWORD) fileSize, 0); @@ -244778,8 +244782,8 @@ MemoryMappedFile::~MemoryMappedFile() if (address != nullptr) UnmapViewOfFile (address); - if (internal != nullptr) - CloseHandle ((HANDLE) internal); + if (fileHandle != nullptr) + CloseHandle ((HANDLE) fileHandle); } int64 File::getSize() const @@ -260572,42 +260576,37 @@ void FileOutputStream::flushInternal() MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode) : address (nullptr), - internal (nullptr), - length (0) + length (0), + fileHandle (0) { jassert (mode == readOnly || mode == readWrite); - const int fd = open (file.getFullPathName().toUTF8(), - mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); + fileHandle = open (file.getFullPathName().toUTF8(), + mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); - internal = reinterpret_cast (fd); - - if (fd != -1) + if (fileHandle != -1) { const int64 fileSize = file.getSize(); - address = mmap (0, (size_t) fileSize, + void* m = mmap (0, (size_t) fileSize, mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ, - MAP_SHARED, fd, 0); + MAP_SHARED, fileHandle, 0); - if (address == MAP_FAILED) - address = nullptr; - else + if (m != MAP_FAILED) + { + address = m; length = (size_t) fileSize; + } } } MemoryMappedFile::~MemoryMappedFile() { - const int fd = reinterpret_cast (internal); - - if (fd != 0) - { - if (address != nullptr) - munmap (address, length); + if (address != nullptr) + munmap (address, length); - close (fd); - } + if (fileHandle != 0) + close (fileHandle); } const File juce_getExecutableFile() @@ -270603,42 +270602,37 @@ void FileOutputStream::flushInternal() MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode) : address (nullptr), - internal (nullptr), - length (0) + length (0), + fileHandle (0) { jassert (mode == readOnly || mode == readWrite); - const int fd = open (file.getFullPathName().toUTF8(), - mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); - - internal = reinterpret_cast (fd); + fileHandle = open (file.getFullPathName().toUTF8(), + mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); - if (fd != -1) + if (fileHandle != -1) { const int64 fileSize = file.getSize(); - address = mmap (0, (size_t) fileSize, + void* m = mmap (0, (size_t) fileSize, mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ, - MAP_SHARED, fd, 0); + MAP_SHARED, fileHandle, 0); - if (address == MAP_FAILED) - address = nullptr; - else + if (m != MAP_FAILED) + { + address = m; length = (size_t) fileSize; + } } } MemoryMappedFile::~MemoryMappedFile() { - const int fd = reinterpret_cast (internal); - - if (fd != 0) - { - if (address != nullptr) - munmap (address, length); + if (address != nullptr) + munmap (address, length); - close (fd); - } + if (fileHandle != 0) + close (fileHandle); } const File juce_getExecutableFile() @@ -287469,42 +287463,37 @@ void FileOutputStream::flushInternal() MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode) : address (nullptr), - internal (nullptr), - length (0) + length (0), + fileHandle (0) { jassert (mode == readOnly || mode == readWrite); - const int fd = open (file.getFullPathName().toUTF8(), - mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); + fileHandle = open (file.getFullPathName().toUTF8(), + mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); - internal = reinterpret_cast (fd); - - if (fd != -1) + if (fileHandle != -1) { const int64 fileSize = file.getSize(); - address = mmap (0, (size_t) fileSize, + void* m = mmap (0, (size_t) fileSize, mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ, - MAP_SHARED, fd, 0); + MAP_SHARED, fileHandle, 0); - if (address == MAP_FAILED) - address = nullptr; - else + if (m != MAP_FAILED) + { + address = m; length = (size_t) fileSize; + } } } MemoryMappedFile::~MemoryMappedFile() { - const int fd = reinterpret_cast (internal); - - if (fd != 0) - { - if (address != nullptr) - munmap (address, length); + if (address != nullptr) + munmap (address, length); - close (fd); - } + if (fileHandle != 0) + close (fileHandle); } const File juce_getExecutableFile() diff --git a/juce_amalgamated.h b/juce_amalgamated.h index c901c56b7f..0f5ab51cf0 100644 --- a/juce_amalgamated.h +++ b/juce_amalgamated.h @@ -19463,9 +19463,14 @@ public: private: void* address; - void* internal; size_t length; + #if JUCE_WINDOWS + void* fileHandle; + #else + int fileHandle; + #endif + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryMappedFile); }; diff --git a/src/audio/audio_file_formats/juce_AudioThumbnail.cpp b/src/audio/audio_file_formats/juce_AudioThumbnail.cpp index fc055ad564..1f727eada9 100644 --- a/src/audio/audio_file_formats/juce_AudioThumbnail.cpp +++ b/src/audio/audio_file_formats/juce_AudioThumbnail.cpp @@ -706,7 +706,12 @@ void AudioThumbnail::setLevels (const MinMaxValue* const* values, int thumbIndex for (int i = jmin (numChans, channels.size()); --i >= 0;) channels.getUnchecked(i)->write (values[i], thumbIndex, numValues); - numSamplesFinished = jmax (numSamplesFinished, (thumbIndex + numValues) * (int64) samplesPerThumbSample); + const int64 start = thumbIndex * (int64) samplesPerThumbSample; + const int64 end = (thumbIndex + numValues) * (int64) samplesPerThumbSample; + + if (numSamplesFinished >= start && end > numSamplesFinished) + numSamplesFinished = end; + totalSamples = jmax (numSamplesFinished, totalSamples); window->invalidate(); sendChangeMessage(); diff --git a/src/io/files/juce_MemoryMappedFile.h b/src/io/files/juce_MemoryMappedFile.h index 140bfb2ab3..210d9e87b4 100644 --- a/src/io/files/juce_MemoryMappedFile.h +++ b/src/io/files/juce_MemoryMappedFile.h @@ -74,9 +74,14 @@ public: private: //============================================================================== void* address; - void* internal; size_t length; + #if JUCE_WINDOWS + void* fileHandle; + #else + int fileHandle; + #endif + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryMappedFile); }; diff --git a/src/native/common/juce_posix_SharedCode.h b/src/native/common/juce_posix_SharedCode.h index c9d4a9bda2..1bb268f4a8 100644 --- a/src/native/common/juce_posix_SharedCode.h +++ b/src/native/common/juce_posix_SharedCode.h @@ -526,42 +526,37 @@ void FileOutputStream::flushInternal() //============================================================================== MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode) : address (nullptr), - internal (nullptr), - length (0) + length (0), + fileHandle (0) { jassert (mode == readOnly || mode == readWrite); - const int fd = open (file.getFullPathName().toUTF8(), - mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); + fileHandle = open (file.getFullPathName().toUTF8(), + mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644); - internal = reinterpret_cast (fd); - - if (fd != -1) + if (fileHandle != -1) { const int64 fileSize = file.getSize(); - address = mmap (0, (size_t) fileSize, + void* m = mmap (0, (size_t) fileSize, mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ, - MAP_SHARED, fd, 0); + MAP_SHARED, fileHandle, 0); - if (address == MAP_FAILED) - address = nullptr; - else + if (m != MAP_FAILED) + { + address = m; length = (size_t) fileSize; + } } } MemoryMappedFile::~MemoryMappedFile() { - const int fd = reinterpret_cast (internal); + if (address != nullptr) + munmap (address, length); - if (fd != 0) - { - if (address != nullptr) - munmap (address, length); - - close (fd); - } + if (fileHandle != 0) + close (fileHandle); } //============================================================================== diff --git a/src/native/windows/juce_win32_Files.cpp b/src/native/windows/juce_win32_Files.cpp index 67637a50e8..76c58845b4 100644 --- a/src/native/windows/juce_win32_Files.cpp +++ b/src/native/windows/juce_win32_Files.cpp @@ -302,8 +302,8 @@ void FileOutputStream::flushInternal() //============================================================================== MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode) : address (nullptr), - internal (nullptr), - length (0) + length (0), + fileHandle (nullptr) { jassert (mode == readOnly || mode == readWrite); @@ -321,10 +321,9 @@ MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMo HANDLE h = CreateFile (file.getFullPathName().toWideCharPointer(), accessMode, FILE_SHARE_READ, 0, createType, FILE_ATTRIBUTE_NORMAL, 0); - internal = (void*) h; - if (h != INVALID_HANDLE_VALUE) { + fileHandle = (void*) h; const int64 fileSize = file.getSize(); HANDLE mappingHandle = CreateFileMapping (h, 0, protect, (DWORD) (fileSize >> 32), (DWORD) fileSize, 0); @@ -345,8 +344,8 @@ MemoryMappedFile::~MemoryMappedFile() if (address != nullptr) UnmapViewOfFile (address); - if (internal != nullptr) - CloseHandle ((HANDLE) internal); + if (fileHandle != nullptr) + CloseHandle ((HANDLE) fileHandle); } //==============================================================================