/[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 2914 by schoenebeck, Tue May 17 19:04:56 2016 UTC revision 2915 by schoenebeck, Tue May 17 19:22:17 2016 UTC
# Line 125  namespace RIFF { Line 125  namespace RIFF {
125              read(pFile->hFileRead, &ChunkID, 4);              read(pFile->hFileRead, &ChunkID, 4);
126              read(pFile->hFileRead, &ullCurrentChunkSize, pFile->FileOffsetSize);              read(pFile->hFileRead, &ullCurrentChunkSize, pFile->FileOffsetSize);
127          #elif defined(WIN32)          #elif defined(WIN32)
128          const LARGE_INTEGER liFilePos = { .QuadPart = filePos };          LARGE_INTEGER liFilePos;
129            liFilePos.QuadPart = filePos;
130          if (SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) {          if (SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) {
131              DWORD dwBytesRead;              DWORD dwBytesRead;
132              ReadFile(pFile->hFileRead, &ChunkID, 4, &dwBytesRead, NULL);              ReadFile(pFile->hFileRead, &ChunkID, 4, &dwBytesRead, NULL);
# Line 185  namespace RIFF { Line 186  namespace RIFF {
186              write(pFile->hFileWrite, &ullNewChunkSize, pFile->FileOffsetSize);              write(pFile->hFileWrite, &ullNewChunkSize, pFile->FileOffsetSize);
187          }          }
188          #elif defined(WIN32)          #elif defined(WIN32)
189          const LARGE_INTEGER liFilePos = { .QuadPart = filePos };          LARGE_INTEGER liFilePos;
190            liFilePos.QuadPart = filePos;
191          if (SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) {          if (SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) {
192              DWORD dwBytesWritten;              DWORD dwBytesWritten;
193              WriteFile(pFile->hFileWrite, &uiNewChunkID, 4, &dwBytesWritten, NULL);              WriteFile(pFile->hFileWrite, &uiNewChunkID, 4, &dwBytesWritten, NULL);
# Line 331  namespace RIFF { Line 333  namespace RIFF {
333          }          }
334          readWords /= WordSize;          readWords /= WordSize;
335          #elif defined(WIN32)          #elif defined(WIN32)
336          const LARGE_INTEGER liFilePos = { .QuadPart = ullStartPos + ullPos };          LARGE_INTEGER liFilePos;
337            liFilePos.QuadPart = ullStartPos + ullPos;
338          if (!SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN))          if (!SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN))
339              return 0;              return 0;
340          DWORD readWords;          DWORD readWords;
# Line 416  namespace RIFF { Line 419  namespace RIFF {
419          if (writtenWords < 1) throw Exception("POSIX IO Error while trying to write chunk data");          if (writtenWords < 1) throw Exception("POSIX IO Error while trying to write chunk data");
420          writtenWords /= WordSize;          writtenWords /= WordSize;
421          #elif defined(WIN32)          #elif defined(WIN32)
422          const LARGE_INTEGER liFilePos = { .QuadPart = ullStartPos + ullPos };          LARGE_INTEGER liFilePos;
423            liFilePos.QuadPart = ullStartPos + ullPos;
424          if (!SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) {          if (!SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) {
425              throw Exception("Could not seek to position " + ToString(ullPos) +              throw Exception("Could not seek to position " + ToString(ullPos) +
426                              " in chunk (" + ToString(ullStartPos + ullPos) + " in file)");                              " in chunk (" + ToString(ullStartPos + ullPos) + " in file)");
# Line 807  namespace RIFF { Line 811  namespace RIFF {
811              #if POSIX              #if POSIX
812              if (lseek(pFile->hFileRead, ullStartPos, SEEK_SET) == -1) return NULL;              if (lseek(pFile->hFileRead, ullStartPos, SEEK_SET) == -1) return NULL;
813              #elif defined(WIN32)              #elif defined(WIN32)
814              const LARGE_INTEGER liFilePos = { .QuadPart = ullStartPos };              LARGE_INTEGER liFilePos;
815                liFilePos.QuadPart = ullStartPos;
816              if (!SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) return NULL;              if (!SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN)) return NULL;
817              #else              #else
818              if (fseeko(pFile->hFileRead, ullStartPos, SEEK_SET)) return NULL;              if (fseeko(pFile->hFileRead, ullStartPos, SEEK_SET)) return NULL;
# Line 912  namespace RIFF { Line 917  namespace RIFF {
917                  throw Exception("Writing Chunk data (from RAM) failed");                  throw Exception("Writing Chunk data (from RAM) failed");
918              }              }
919              #elif defined(WIN32)              #elif defined(WIN32)
920              const LARGE_INTEGER liFilePos = { .QuadPart = ullWritePos };              LARGE_INTEGER liFilePos;
921                liFilePos.QuadPart = ullWritePos;
922              SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);              SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);
923              DWORD dwBytesWritten;              DWORD dwBytesWritten;
924              WriteFile(pFile->hFileWrite, pChunkData, ullNewChunkSize, &dwBytesWritten, NULL); //FIXME: won't save chunks larger than 2GB !              WriteFile(pFile->hFileWrite, pChunkData, ullNewChunkSize, &dwBytesWritten, NULL); //FIXME: won't save chunks larger than 2GB !
# Line 942  namespace RIFF { Line 948  namespace RIFF {
948                  lseek(pFile->hFileWrite, ullWritePos + ullOffset, SEEK_SET);                  lseek(pFile->hFileWrite, ullWritePos + ullOffset, SEEK_SET);
949                  iBytesMoved = write(pFile->hFileWrite, pCopyBuffer, iBytesMoved);                  iBytesMoved = write(pFile->hFileWrite, pCopyBuffer, iBytesMoved);
950                  #elif defined(WIN32)                  #elif defined(WIN32)
951                  LARGE_INTEGER liFilePos = { .QuadPart = ullStartPos + ullCurrentDataOffset + ullOffset };                  LARGE_INTEGER liFilePos;
952                    liFilePos.QuadPart = ullStartPos + ullCurrentDataOffset + ullOffset;
953                  SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);                  SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);
954                  ReadFile(pFile->hFileRead, pCopyBuffer, iBytesMoved, &iBytesMoved, NULL);                  ReadFile(pFile->hFileRead, pCopyBuffer, iBytesMoved, &iBytesMoved, NULL);
955                  liFilePos.QuadPart = ullWritePos + ullOffset;                  liFilePos.QuadPart = ullWritePos + ullOffset;
# Line 976  namespace RIFF { Line 983  namespace RIFF {
983              lseek(pFile->hFileWrite, ullStartPos + ullNewChunkSize, SEEK_SET);              lseek(pFile->hFileWrite, ullStartPos + ullNewChunkSize, SEEK_SET);
984              write(pFile->hFileWrite, &cPadByte, 1);              write(pFile->hFileWrite, &cPadByte, 1);
985              #elif defined(WIN32)              #elif defined(WIN32)
986              const LARGE_INTEGER liFilePos = { .QuadPart = ullStartPos + ullNewChunkSize };              LARGE_INTEGER liFilePos;
987                liFilePos.QuadPart = ullStartPos + ullNewChunkSize;
988              SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);              SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);
989              DWORD dwBytesWritten;              DWORD dwBytesWritten;
990              WriteFile(pFile->hFileWrite, &cPadByte, 1, &dwBytesWritten, NULL);              WriteFile(pFile->hFileWrite, &cPadByte, 1, &dwBytesWritten, NULL);
# Line 1375  namespace RIFF { Line 1383  namespace RIFF {
1383          lseek(pFile->hFileRead, filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize), SEEK_SET);          lseek(pFile->hFileRead, filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize), SEEK_SET);
1384          read(pFile->hFileRead, &ListType, 4);          read(pFile->hFileRead, &ListType, 4);
1385          #elif defined(WIN32)          #elif defined(WIN32)
1386          const LARGE_INTEGER liFilePos = { .QuadPart = filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize) };          LARGE_INTEGER liFilePos;
1387            liFilePos.QuadPart = filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize);
1388          SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);          SetFilePointerEx(pFile->hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);
1389          DWORD dwBytesRead;          DWORD dwBytesRead;
1390          ReadFile(pFile->hFileRead, &ListType, 4, &dwBytesRead, NULL);          ReadFile(pFile->hFileRead, &ListType, 4, &dwBytesRead, NULL);
# Line 1400  namespace RIFF { Line 1409  namespace RIFF {
1409          lseek(pFile->hFileWrite, filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize), SEEK_SET);          lseek(pFile->hFileWrite, filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize), SEEK_SET);
1410          write(pFile->hFileWrite, &ListType, 4);          write(pFile->hFileWrite, &ListType, 4);
1411          #elif defined(WIN32)          #elif defined(WIN32)
1412          const LARGE_INTEGER liFilePos = { .QuadPart = filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize) };          LARGE_INTEGER liFilePos;
1413            liFilePos.QuadPart = filePos + CHUNK_HEADER_SIZE(pFile->FileOffsetSize);
1414          SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);          SetFilePointerEx(pFile->hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);
1415          DWORD dwBytesWritten;          DWORD dwBytesWritten;
1416          WriteFile(pFile->hFileWrite, &ListType, 4, &dwBytesWritten, NULL);          WriteFile(pFile->hFileWrite, &ListType, 4, &dwBytesWritten, NULL);
# Line 1909  namespace RIFF { Line 1919  namespace RIFF {
1919                  lseek(hFileWrite, ullPos + positiveSizeDiff, SEEK_SET);                  lseek(hFileWrite, ullPos + positiveSizeDiff, SEEK_SET);
1920                  iBytesMoved = write(hFileWrite, pCopyBuffer, iBytesMoved);                  iBytesMoved = write(hFileWrite, pCopyBuffer, iBytesMoved);
1921                  #elif defined(WIN32)                  #elif defined(WIN32)
1922                  LARGE_INTEGER liFilePos = { .QuadPart = ullPos };                  LARGE_INTEGER liFilePos;
1923                    liFilePos.QuadPart = ullPos;
1924                  SetFilePointerEx(hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);                  SetFilePointerEx(hFileRead, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN);
1925                  ReadFile(hFileRead, pCopyBuffer, iBytesMoved, &iBytesMoved, NULL);                  ReadFile(hFileRead, pCopyBuffer, iBytesMoved, &iBytesMoved, NULL);
1926                  liFilePos.QuadPart = ullPos + positiveSizeDiff;                  liFilePos.QuadPart = ullPos + positiveSizeDiff;
# Line 2053  namespace RIFF { Line 2064  namespace RIFF {
2064          if (ftruncate(hFileWrite, ullNewSize) < 0)          if (ftruncate(hFileWrite, ullNewSize) < 0)
2065              throw Exception("Could not resize file \"" + Filename + "\"");              throw Exception("Could not resize file \"" + Filename + "\"");
2066          #elif defined(WIN32)          #elif defined(WIN32)
2067          const LARGE_INTEGER liFilePos = { .QuadPart = ullNewSize };          LARGE_INTEGER liFilePos;
2068            liFilePos.QuadPart = ullNewSize;
2069          if (          if (
2070              !SetFilePointerEx(hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN) ||              !SetFilePointerEx(hFileWrite, liFilePos, NULL/*new pos pointer*/, FILE_BEGIN) ||
2071              !SetEndOfFile(hFileWrite)              !SetEndOfFile(hFileWrite)

Legend:
Removed from v.2914  
changed lines
  Added in v.2915

  ViewVC Help
Powered by ViewVC