int OGRDXFWriterDS::TransferUpdateTrailer( VSILFILE *fpOut ) { OGRDXFReader oReader; VSILFILE *fp; /* -------------------------------------------------------------------- */ /* Open the file and setup a reader. */ /* -------------------------------------------------------------------- */ fp = VSIFOpenL( osTrailerFile, "r" ); if( fp == NULL ) return FALSE; oReader.Initialize( fp ); /* -------------------------------------------------------------------- */ /* Scan ahead to find the OBJECTS section. */ /* -------------------------------------------------------------------- */ char szLineBuf[257]; int nCode; while( (nCode = oReader.ReadValue( szLineBuf, sizeof(szLineBuf) )) != -1 ) { if( nCode == 0 && EQUAL(szLineBuf,"SECTION") ) { nCode = oReader.ReadValue( szLineBuf, sizeof(szLineBuf) ); if( nCode == 2 && EQUAL(szLineBuf,"OBJECTS") ) break; } } if( nCode == -1 ) { CPLError( CE_Failure, CPLE_AppDefined, "Failed to find OBJECTS section in trailer file '%s'.", osTrailerFile.c_str() ); return FALSE; } /* -------------------------------------------------------------------- */ /* Insert the "end of section" for ENTITIES, and the start of */ /* the OBJECTS section. */ /* -------------------------------------------------------------------- */ WriteValue( fpOut, 0, "ENDSEC" ); WriteValue( fpOut, 0, "SECTION" ); WriteValue( fpOut, 2, "OBJECTS" ); /* -------------------------------------------------------------------- */ /* Copy the remainder of the file. */ /* -------------------------------------------------------------------- */ while( (nCode = oReader.ReadValue( szLineBuf, sizeof(szLineBuf) )) != -1 ) { if( !WriteValue( fpOut, nCode, szLineBuf ) ) { VSIFCloseL( fp ); return FALSE; } } VSIFCloseL( fp ); return TRUE; }