Changeset 11909

Show
Ignore:
Timestamp:
08/18/07 12:48:14 (1 year ago)
Author:
mloskot
Message:

Fixed handling VRT as a source dataset in VRTCreatCopy operation (Ticket #1749).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/gdal/frmts/vrt/vrtdataset.cpp

    r11898 r11909  
    150150    /*      Setup root node and attributes.                                 */ 
    151151    /* -------------------------------------------------------------------- */ 
    152     CPLXMLNode *psDSTree, *psMD; 
     152    CPLXMLNode *psDSTree = NULL; 
     153    CPLXMLNode *psMD = NULL; 
    153154    char       szNumber[128]; 
    154155 
  • trunk/gdal/frmts/vrt/vrtdriver.cpp

    r11898 r11909  
    153153    if( EQUAL(poSrcDS->GetDriver()->GetDescription(),"VRT") ) 
    154154    { 
    155         FILE *fpVRT = NULL; 
    156  
    157         fpVRT = VSIFOpen( pszFilename, "w" ); 
    158  
    159         if( NULL == fpVRT ) 
    160         { 
    161             CPLError( CE_Failure, CPLE_AppDefined,  
    162                       "Can not open virtual dataset (\'%s\') for writing.", 
    163                       pszFilename ); 
    164             return NULL; 
    165         } 
    166155 
    167156    /* -------------------------------------------------------------------- */ 
     
    170159        char *pszVRTPath = CPLStrdup(CPLGetPath(pszFilename)); 
    171160        CPLXMLNode *psDSTree = ((VRTDataset *) poSrcDS)->SerializeToXML( pszVRTPath ); 
    172         char *pszXML; 
    173          
    174         pszXML = CPLSerializeXMLTree( psDSTree ); 
     161 
     162        char *pszXML = CPLSerializeXMLTree( psDSTree ); 
    175163         
    176164        CPLDestroyXMLNode( psDSTree ); 
     
    181169    /*      Write to disk.                                                  */ 
    182170    /* -------------------------------------------------------------------- */ 
    183         CPLAssert( NULL != fpVRT ); 
    184  
    185         VSIFWrite( pszXML, 1, strlen(pszXML), fpVRT ); 
    186         VSIFClose( fpVRT ); 
     171        GDALDataset* pCopyDS = NULL; 
     172 
     173        if( 0 != strlen( pszFilename ) ) 
     174        { 
     175            FILE *fpVRT = NULL; 
     176 
     177            fpVRT = VSIFOpen( pszFilename, "w" ); 
     178            CPLAssert( NULL != fpVRT ); 
     179 
     180            VSIFWrite( pszXML, 1, strlen(pszXML), fpVRT ); 
     181            VSIFClose( fpVRT ); 
     182 
     183            pCopyDS = (GDALDataset *) GDALOpen( pszFilename, GA_Update ); 
     184        } 
     185        else 
     186        { 
     187            /* No destination file is given, so pass serialized XML directly. */ 
     188 
     189            pCopyDS = (GDALDataset *) GDALOpen( pszXML, GA_Update ); 
     190        } 
    187191 
    188192        CPLFree( pszXML ); 
    189          
    190         return (GDALDataset *) GDALOpen( pszFilename, GA_Update )
     193 
     194        return pCopyDS
    191195    } 
    192196