Changeset 13927

Show
Ignore:
Timestamp:
03/04/08 16:03:55 (2 months ago)
Author:
rouault
Message:

Handle >2GB memory arrays on a 64-bit build (#2199)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.5/gdal/gcore/rasterio.cpp

    r12863 r13927  
    108108            { 
    109109                if( eRWFlag == GF_Read ) 
    110                     memcpy( ((GByte *) pData) + iBufYOff * nLineSpace, 
     110                    memcpy( ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    111111                            pabySrcBlock + nSrcByteOffset,  
    112112                            nLineSpace ); 
    113113                else 
    114114                    memcpy( pabySrcBlock + nSrcByteOffset,  
    115                             ((GByte *) pData) + iBufYOff * nLineSpace, 
     115                            ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    116116                            nLineSpace ); 
    117117            } 
     
    123123                    GDALCopyWords( pabySrcBlock + nSrcByteOffset, 
    124124                                   eDataType, nBandDataSize, 
    125                                    ((GByte *) pData) + iBufYOff * nLineSpace, 
     125                                   ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    126126                                   eBufType, nPixelSpace, nBufXSize ); 
    127127                else 
    128                     GDALCopyWords( ((GByte *) pData) + iBufYOff * nLineSpace, 
     128                    GDALCopyWords( ((GByte *) pData) + (size_t)iBufYOff * nLineSpace, 
    129129                                   eBufType, nPixelSpace, 
    130130                                   pabySrcBlock + nSrcByteOffset, 
     
    177177        for( iBufYOff = 0, iSrcY = nYOff; iBufYOff < nBufYSize; iBufYOff++, iSrcY++ ) 
    178178        { 
    179             int     iBufOffset, iSrcOffset, nXSpan; 
    180              
    181             iBufOffset = iBufYOff * nLineSpace; 
     179            size_t  iBufOffset, iSrcOffset; 
     180            int     nXSpan; 
     181 
     182            iBufOffset = (size_t)iBufYOff * nLineSpace; 
    182183            nLBlockY = iSrcY / nBlockYSize; 
    183184            nLBlockX = nLBlockXStart; 
     
    230231/*      Copy over this chunk of data.                                   */ 
    231232/* -------------------------------------------------------------------- */ 
    232                 iSrcOffset = (iSrcX - nLBlockX*nBlockXSize 
    233                     + (iSrcY - nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
     233                iSrcOffset = ((size_t)iSrcX - (size_t)nLBlockX*nBlockXSize 
     234                    + ((size_t)iSrcY - (size_t)nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
    234235 
    235236                if( eDataType == eBufType  
     
    294295    for( iBufYOff = 0; iBufYOff < nBufYSize; iBufYOff++ ) 
    295296    { 
    296         int     iBufOffset, iSrcOffset; 
     297        size_t   iBufOffset, iSrcOffset; 
    297298         
    298299        dfSrcY = (iBufYOff+0.5) * dfSrcYInc + nYOff; 
    299300        iSrcY = (int) dfSrcY; 
    300301 
    301         iBufOffset = iBufYOff * nLineSpace; 
     302        iBufOffset = (size_t)iBufYOff * nLineSpace; 
    302303         
    303304        for( iBufXOff = 0; iBufXOff < nBufXSize; iBufXOff++ ) 
     
    349350/*      Copy over this pixel of data.                                   */ 
    350351/* -------------------------------------------------------------------- */ 
    351             iSrcOffset = (iSrcX - nLBlockX*nBlockXSize 
    352                 + (iSrcY - nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
     352            iSrcOffset = ((size_t)iSrcX - (size_t)nLBlockX*nBlockXSize 
     353                + ((size_t)iSrcY - (size_t)nLBlockY*nBlockYSize) * nBlockXSize)*nBandDataSize; 
    353354 
    354355            if( eDataType == eBufType )