/[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 1207 by persson, Sat May 26 13:59:40 2007 UTC revision 1459 by schoenebeck, Fri Oct 26 10:58:41 2007 UTC
# Line 33  namespace RIFF { Line 33  namespace RIFF {
33  // *  // *
34    
35      /// Returns a human readable path of the given chunk.      /// Returns a human readable path of the given chunk.
36      String __resolveChunkPath(Chunk* pCk) {      static String __resolveChunkPath(Chunk* pCk) {
37          String sPath;          String sPath;
38          for (Chunk* pChunk = pCk; pChunk; pChunk = pChunk->GetParent()) {          for (Chunk* pChunk = pCk; pChunk; pChunk = pChunk->GetParent()) {
39              if (pChunk->GetChunkID() == CHUNK_ID_LIST) {              if (pChunk->GetChunkID() == CHUNK_ID_LIST) {
# Line 235  namespace RIFF { Line 235  namespace RIFF {
235       *  - RIFF::stream_closed :       *  - RIFF::stream_closed :
236       *    the data stream was closed somehow, no more reading possible       *    the data stream was closed somehow, no more reading possible
237       *  - RIFF::stream_end_reached :       *  - RIFF::stream_end_reached :
238       *    alreaady reached the end of the chunk data, no more reading       *    already reached the end of the chunk data, no more reading
239       *    possible without SetPos()       *    possible without SetPos()
240       */       */
241      stream_state_t Chunk::GetState() {      stream_state_t Chunk::GetState() {
# Line 358  namespace RIFF { Line 358  namespace RIFF {
358          #elif defined(WIN32)          #elif defined(WIN32)
359          if (SetFilePointer(pFile->hFileWrite, ulStartPos + ulPos, NULL/*32 bit*/, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {          if (SetFilePointer(pFile->hFileWrite, ulStartPos + ulPos, NULL/*32 bit*/, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
360              throw Exception("Could not seek to position " + ToString(ulPos) +              throw Exception("Could not seek to position " + ToString(ulPos) +
361                              " in chunk (" + ToString(ulStartPos + ulPos) + " in file)");                                          " in chunk (" + ToString(ulStartPos + ulPos) + " in file)");
362          }          }
363          DWORD writtenWords;          DWORD writtenWords;
364          WriteFile(pFile->hFileWrite, pData, WordCount * WordSize, &writtenWords, NULL);          WriteFile(pFile->hFileWrite, pData, WordCount * WordSize, &writtenWords, NULL);
# Line 1268  namespace RIFF { Line 1268  namespace RIFF {
1268          if (!pSubChunks) {          if (!pSubChunks) {
1269              pSubChunks    = new ChunkList();              pSubChunks    = new ChunkList();
1270              pSubChunksMap = new ChunkMap();              pSubChunksMap = new ChunkMap();
1271                #if defined(WIN32)
1272                if (pFile->hFileRead == INVALID_HANDLE_VALUE) return;
1273                #else
1274              if (!pFile->hFileRead) return;              if (!pFile->hFileRead) return;
1275                #endif
1276              unsigned long uiOriginalPos = GetPos();              unsigned long uiOriginalPos = GetPos();
1277              SetPos(0); // jump to beginning of list chunk body              SetPos(0); // jump to beginning of list chunk body
1278              while (RemainingBytes() >= CHUNK_HEADER_SIZE) {              while (RemainingBytes() >= CHUNK_HEADER_SIZE) {
# Line 1408  namespace RIFF { Line 1412  namespace RIFF {
1412                                       path.c_str(), GENERIC_READ,                                       path.c_str(), GENERIC_READ,
1413                                       FILE_SHARE_READ | FILE_SHARE_WRITE,                                       FILE_SHARE_READ | FILE_SHARE_WRITE,
1414                                       NULL, OPEN_EXISTING,                                       NULL, OPEN_EXISTING,
1415                                       FILE_ATTRIBUTE_NORMAL, NULL                                       FILE_ATTRIBUTE_NORMAL |
1416                                         FILE_FLAG_RANDOM_ACCESS, NULL
1417                                   );                                   );
1418          if (hFileRead == INVALID_HANDLE_VALUE) {          if (hFileRead == INVALID_HANDLE_VALUE) {
1419              hFileRead = hFileWrite = INVALID_HANDLE_VALUE;              hFileRead = hFileWrite = INVALID_HANDLE_VALUE;
# Line 1461  namespace RIFF { Line 1466  namespace RIFF {
1466                                                   Filename.c_str(), GENERIC_READ,                                                   Filename.c_str(), GENERIC_READ,
1467                                                   FILE_SHARE_READ | FILE_SHARE_WRITE,                                                   FILE_SHARE_READ | FILE_SHARE_WRITE,
1468                                                   NULL, OPEN_EXISTING,                                                   NULL, OPEN_EXISTING,
1469                                                   FILE_ATTRIBUTE_NORMAL, NULL                                                   FILE_ATTRIBUTE_NORMAL |
1470                                                     FILE_FLAG_RANDOM_ACCESS,
1471                                                     NULL
1472                                               );                                               );
1473                      if (hFileRead == INVALID_HANDLE_VALUE) {                      if (hFileRead == INVALID_HANDLE_VALUE) {
1474                          hFileRead = hFileWrite = INVALID_HANDLE_VALUE;                          hFileRead = hFileWrite = INVALID_HANDLE_VALUE;
# Line 1489  namespace RIFF { Line 1496  namespace RIFF {
1496                                                   GENERIC_READ | GENERIC_WRITE,                                                   GENERIC_READ | GENERIC_WRITE,
1497                                                   FILE_SHARE_READ,                                                   FILE_SHARE_READ,
1498                                                   NULL, OPEN_ALWAYS,                                                   NULL, OPEN_ALWAYS,
1499                                                   FILE_ATTRIBUTE_NORMAL, NULL                                                   FILE_ATTRIBUTE_NORMAL |
1500                                                     FILE_FLAG_RANDOM_ACCESS,
1501                                                     NULL
1502                                               );                                               );
1503                      if (hFileRead == INVALID_HANDLE_VALUE) {                      if (hFileRead == INVALID_HANDLE_VALUE) {
1504                          hFileRead = hFileWrite = CreateFile(                          hFileRead = hFileWrite = CreateFile(
1505                                                       Filename.c_str(), GENERIC_READ,                                                       Filename.c_str(), GENERIC_READ,
1506                                                       FILE_SHARE_READ | FILE_SHARE_WRITE,                                                       FILE_SHARE_READ | FILE_SHARE_WRITE,
1507                                                       NULL, OPEN_EXISTING,                                                       NULL, OPEN_EXISTING,
1508                                                       FILE_ATTRIBUTE_NORMAL, NULL                                                       FILE_ATTRIBUTE_NORMAL |
1509                                                         FILE_FLAG_RANDOM_ACCESS,
1510                                                         NULL
1511                                                   );                                                   );
1512                          throw Exception("Could not (re)open file \"" + Filename + "\" in read mode");                          throw Exception("Could not (re)open file \"" + Filename + "\" in read+write mode");
1513                      }                      }
1514                      #else                      #else
1515                      if (hFileRead) fclose(hFileRead);                      if (hFileRead) fclose(hFileRead);
# Line 1598  namespace RIFF { Line 1609  namespace RIFF {
1609              #if defined(WIN32)              #if defined(WIN32)
1610              DWORD iBytesMoved = 1; // we have to pass it via pointer to the Windows API, thus the correct size must be ensured              DWORD iBytesMoved = 1; // we have to pass it via pointer to the Windows API, thus the correct size must be ensured
1611              #else              #else
1612              int iBytesMoved = 1;              int iBytesMoved = 1;
1613              #endif              #endif
1614              for (unsigned long ulPos = 0; iBytesMoved > 0; ulPos += iBytesMoved) {              for (unsigned long ulPos = 0; iBytesMoved > 0; ulPos += iBytesMoved) {
1615                  const unsigned long ulToMove = ulFileSize - ulPos;                  const unsigned long ulToMove = ulFileSize - ulPos;
# Line 1665  namespace RIFF { Line 1676  namespace RIFF {
1676          #elif defined(WIN32)          #elif defined(WIN32)
1677          hFileWrite = CreateFile(          hFileWrite = CreateFile(
1678                           path.c_str(), GENERIC_WRITE, FILE_SHARE_READ,                           path.c_str(), GENERIC_WRITE, FILE_SHARE_READ,
1679                           NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL                           NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL |
1680                             FILE_FLAG_RANDOM_ACCESS, NULL
1681                       );                       );
1682          if (hFileWrite == INVALID_HANDLE_VALUE) {          if (hFileWrite == INVALID_HANDLE_VALUE) {
1683              hFileWrite = hFileRead;              hFileWrite = hFileRead;
# Line 1690  namespace RIFF { Line 1702  namespace RIFF {
1702          // forget all resized chunks          // forget all resized chunks
1703          ResizedChunks.clear();          ResizedChunks.clear();
1704    
1705          if (Filename.length() > 0) {          #if POSIX
1706              #if POSIX          if (hFileWrite) close(hFileWrite);
1707              close(hFileWrite);          #elif defined(WIN32)
1708              #elif defined(WIN32)          if (hFileWrite != INVALID_HANDLE_VALUE) CloseHandle(hFileWrite);
1709              CloseHandle(hFileWrite);          #else
1710              #else          if (hFileWrite) fclose(hFileWrite);
1711              fclose(hFileWrite);          #endif
1712              #endif          hFileWrite = hFileRead;
             hFileWrite = hFileRead;  
         }  
1713    
1714          // associate new file with this File object from now on          // associate new file with this File object from now on
1715          Filename = path;          Filename = path;

Legend:
Removed from v.1207  
changed lines
  Added in v.1459

  ViewVC Help
Powered by ViewVC