/[svn]/libgig/trunk/src/RIFF.cpp
ViewVC logotype

Diff of /libgig/trunk/src/RIFF.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1678 by persson, Sun Feb 10 16:07:22 2008 UTC revision 1859 by persson, Sun Mar 8 12:24:56 2009 UTC
# Line 2  Line 2 
2   *                                                                         *   *                                                                         *
3   *   libgig - C++ cross-platform Gigasampler format file access library    *   *   libgig - C++ cross-platform Gigasampler format file access library    *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003-2007 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2009 by Christian Schoenebeck                      *
6   *                              <cuse@users.sourceforge.net>               *   *                              <cuse@users.sourceforge.net>               *
7   *                                                                         *   *                                                                         *
8   *   This library is free software; you can redistribute it and/or modify  *   *   This library is free software; you can redistribute it and/or modify  *
# Line 21  Line 21 
21   *   MA  02111-1307  USA                                                   *   *   MA  02111-1307  USA                                                   *
22   ***************************************************************************/   ***************************************************************************/
23    
24    #include <algorithm>
25  #include <string.h>  #include <string.h>
26    
27  #include "RIFF.h"  #include "RIFF.h"
# Line 273  namespace RIFF { Line 274  namespace RIFF {
274         #if DEBUG         #if DEBUG
275         std::cout << "Chunk::Read(void*,ulong,ulong)" << std::endl;         std::cout << "Chunk::Read(void*,ulong,ulong)" << std::endl;
276         #endif // DEBUG         #endif // DEBUG
277            if (ulStartPos == 0) return 0; // is only 0 if this is a new chunk, so nothing to read (yet)
278          if (ulPos >= CurrentChunkSize) return 0;          if (ulPos >= CurrentChunkSize) return 0;
279          if (ulPos + WordCount * WordSize >= CurrentChunkSize) WordCount = (CurrentChunkSize - ulPos) / WordSize;          if (ulPos + WordCount * WordSize >= CurrentChunkSize) WordCount = (CurrentChunkSize - ulPos) / WordSize;
280          #if POSIX          #if POSIX
# Line 725  namespace RIFF { Line 727  namespace RIFF {
727       * @see ReleaseChunkData()       * @see ReleaseChunkData()
728       */       */
729      void* Chunk::LoadChunkData() {      void* Chunk::LoadChunkData() {
730          if (!pChunkData && pFile->Filename != "") {          if (!pChunkData && pFile->Filename != "" && ulStartPos != 0) {
731              #if POSIX              #if POSIX
732              if (lseek(pFile->hFileRead, ulStartPos, SEEK_SET) == -1) return NULL;              if (lseek(pFile->hFileRead, ulStartPos, SEEK_SET) == -1) return NULL;
733              #elif defined(WIN32)              #elif defined(WIN32)
# Line 1594  namespace RIFF { Line 1596  namespace RIFF {
1596              if ((*iter)->GetNewSize() == 0) {              if ((*iter)->GetNewSize() == 0) {
1597                  throw Exception("There is at least one empty chunk (zero size): " + __resolveChunkPath(*iter));                  throw Exception("There is at least one empty chunk (zero size): " + __resolveChunkPath(*iter));
1598              }              }
1599              unsigned long ulDiff = (*iter)->GetNewSize() + (*iter)->GetNewSize() % 2 - (*iter)->GetSize() - (*iter)->GetSize() % 2;              unsigned long newSizePadded = (*iter)->GetNewSize() + (*iter)->GetNewSize() % 2;
1600              if (ulDiff > 0) ulPositiveSizeDiff += ulDiff;              unsigned long oldSizePadded = (*iter)->GetSize() + (*iter)->GetSize() % 2;
1601                if (newSizePadded > oldSizePadded) ulPositiveSizeDiff += newSizePadded - oldSizePadded;
1602          }          }
1603    
1604          unsigned long ulWorkingFileSize = GetFileSize();          unsigned long ulWorkingFileSize = GetFileSize();

Legend:
Removed from v.1678  
changed lines
  Added in v.1859

  ViewVC Help
Powered by ViewVC