Ticket #2203: gdal_svn_trunk_fix2203.patch
| File gdal_svn_trunk_fix2203.patch, 10.0 kB (added by rouault, 5 months ago) |
|---|
-
ogr/ogrsf_frmts/ili/ogrili1layer.cpp
old new 43 43 OGRILI1DataSource *poDSIn ) 44 44 45 45 { 46 poFilterGeom = NULL;47 48 46 if( poSRSIn == NULL ) 49 47 poSRS = NULL; 50 48 else … … 68 66 /************************************************************************/ 69 67 70 68 OGRILI1Layer::~OGRILI1Layer() 71 72 69 { 70 int i; 71 72 for(i=0;i<nFeatures;i++) 73 { 74 delete papoFeatures[i]; 75 } 76 CPLFree(papoFeatures); 77 73 78 if( poFeatureDefn ) 74 79 poFeatureDefn->Release(); 75 80 76 81 if( poSRS != NULL ) 77 82 poSRS->Release(); 78 79 if( poFilterGeom != NULL )80 delete poFilterGeom;81 83 } 82 84 83 /************************************************************************/84 /* SetSpatialFilter() */85 /************************************************************************/86 85 87 void OGRILI1Layer::SetSpatialFilter( OGRGeometry * poGeomIn ) 88 86 OGRErr OGRILI1Layer::AddFeature (OGRFeature *poFeature) 89 87 { 90 if( poFilterGeom != NULL ) 91 { 92 delete poFilterGeom; 93 poFilterGeom = NULL; 94 } 88 nFeatures++; 95 89 96 if( poGeomIn != NULL )97 poFilterGeom = poGeomIn->clone();98 }99 100 OGRErr OGRILI1Layer::AddFeature (OGRFeature *poFeature) {101 90 papoFeatures = (OGRFeature **) 102 CPLRealloc( papoFeatures, sizeof(void*) * ++nFeatures );91 CPLRealloc( papoFeatures, sizeof(void*) * nFeatures ); 103 92 104 93 papoFeatures[nFeatures-1] = poFeature; 105 94 … … 118 107 /* GetNextFeature() */ 119 108 /************************************************************************/ 120 109 121 OGRFeature *OGRILI1Layer::GetNextFeature() { 122 OGRFeature *poFeature = GetNextFeatureRef(); 123 return poFeature ? poFeature->Clone() : NULL; 110 OGRFeature *OGRILI1Layer::GetNextFeature() 111 { 112 OGRFeature *poFeature; 113 114 while(nFeatureIdx < nFeatures) 115 { 116 poFeature = GetNextFeatureRef(); 117 if (poFeature) 118 return poFeature->Clone(); 119 } 120 return NULL; 124 121 } 125 122 126 123 OGRFeature *OGRILI1Layer::GetNextFeatureRef() { … … 161 158 /* GetFeatureCount() */ 162 159 /************************************************************************/ 163 160 164 int OGRILI1Layer::GetFeatureCount( int bForce ) { 165 return nFeatures; 161 int OGRILI1Layer::GetFeatureCount( int bForce ) 162 { 163 if (m_poFilterGeom == NULL && m_poAttrQuery == NULL) 164 { 165 return nFeatures; 166 } 167 else 168 { 169 return OGRLayer::GetFeatureCount(bForce); 170 } 166 171 } 167 172 168 /************************************************************************/169 /* GetExtent() */170 /************************************************************************/171 172 OGRErr OGRILI1Layer::GetExtent(OGREnvelope *psExtent, int bForce ) {173 return OGRLayer::GetExtent( psExtent, bForce );174 }175 176 173 static char* d2str(double val) 177 174 { 178 175 static char strbuf[255]; -
ogr/ogrsf_frmts/ili/ogr_ili1.h
old new 46 46 private: 47 47 OGRSpatialReference *poSRS; 48 48 OGRFeatureDefn *poFeatureDefn; 49 OGRGeometry *poFilterGeom;50 49 51 50 int nFeatures; 52 51 OGRFeature **papoFeatures; … … 65 64 66 65 ~OGRILI1Layer(); 67 66 68 OGRGeometry * GetSpatialFilter() { return poFilterGeom; }69 void SetSpatialFilter( OGRGeometry * );70 71 67 OGRErr AddFeature(OGRFeature *poFeature); 72 68 73 69 void ResetReading(); … … 76 72 OGRFeature * GetFeatureRef( long nFID ); 77 73 78 74 int GetFeatureCount( int bForce = TRUE ); 79 OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE);80 75 81 76 OGRErr CreateFeature( OGRFeature *poFeature ); 82 77 int GeometryAppend( OGRGeometry *poGeometry ); … … 101 96 IILI1Reader *poReader; 102 97 FILE *fpTransfer; 103 98 char *pszTopic; 99 int nLayers; 100 OGRILI1Layer** papoLayers; 104 101 105 102 public: 106 103 OGRILI1DataSource(); -
ogr/ogrsf_frmts/ili/ogrili1datasource.cpp
old new 51 51 poReader = NULL; 52 52 fpTransfer = NULL; 53 53 pszTopic = NULL; 54 nLayers = 0; 55 papoLayers = NULL; 54 56 } 55 57 56 58 /************************************************************************/ … … 60 62 OGRILI1DataSource::~OGRILI1DataSource() 61 63 62 64 { 65 int i; 66 67 for(i=0;i<nLayers;i++) 68 { 69 delete papoLayers[i]; 70 } 71 CPLFree( papoLayers ); 72 63 73 CPLFree( pszName ); 74 CPLFree( pszTopic ); 75 DestroyILI1Reader( poReader ); 64 76 if( fpTransfer ) 65 77 { 66 78 VSIFPrintf( fpTransfer, "ETAB\n" ); … … 266 278 pszTopic = topic; 267 279 VSIFPrintf( fpTransfer, "TOPI %s\n", pszTopic ); 268 280 } 281 else 282 { 283 CPLFree(topic); 284 } 269 285 } 270 286 else if (pszTopic == NULL) 271 287 { … … 273 289 VSIFPrintf( fpTransfer, "TOPI %s\n", pszTopic ); 274 290 } 275 291 VSIFPrintf( fpTransfer, "TABL %s\n", table ); 276 OGRILI1Layer *poLayer = new OGRILI1Layer(CPLStrdup(table), poSRS, TRUE, eType, this); 292 293 OGRILI1Layer *poLayer = new OGRILI1Layer(table, poSRS, TRUE, eType, this); 294 295 nLayers ++; 296 papoLayers = (OGRILI1Layer**)CPLRealloc(papoLayers, sizeof(OGRILI1Layer*) * nLayers); 297 papoLayers[nLayers-1] = poLayer; 298 277 299 return poLayer; 278 300 } 279 301 -
ogr/ogrsf_frmts/ili/ili1reader.cpp
old new 71 71 } 72 72 73 73 ILI1Reader::~ILI1Reader() { 74 int i; 74 75 if (fpItf) VSIFClose( fpItf ); 76 77 for(i=0;i<nLayers;i++) 78 delete papoLayers[i]; 79 CPLFree(papoLayers); 80 81 for(i=0;i<nAreaLayers;i++) 82 { 83 delete papoAreaLayers[i]; 84 delete papoAreaLineLayers[i]; 85 } 86 CPLFree(papoAreaLayers); 87 CPLFree(papoAreaLineLayers); 88 89 for(i=0;i<nSurfaceLayers;i++) 90 { 91 delete papoSurfaceLayers[i]; 92 delete papoSurfacePolyLayers[i]; 93 } 94 CPLFree(papoSurfaceLayers); 95 CPLFree(papoSurfacePolyLayers); 75 96 } 76 97 77 98 void ILI1Reader::SetArcDegrees(double arcDegrees) { … … 267 288 char **tokens = NULL; 268 289 const char *firsttok = NULL; 269 290 const char *pszLine; 270 c onst char *topic = NULL;291 char *topic = NULL; 271 292 int ret = TRUE; 272 293 273 294 while (ret && (tokens = ReadParseLine())) … … 301 322 } 302 323 else if (EQUAL(firsttok, "TOPI")) 303 324 { 325 CPLFree(topic); 304 326 topic = CPLStrdup(CSLGetField(tokens, 1)); 305 327 } 306 328 else if (EQUAL(firsttok, "TABL")) … … 329 351 } 330 352 else if (EQUAL(firsttok, "ENDE")) 331 353 { 354 CSLDestroy(tokens); 355 CPLFree(topic); 332 356 JoinSurfaceLayers(); 333 357 PolygonizeAreaLayers(); 334 358 return TRUE; … … 339 363 } 340 364 341 365 CSLDestroy(tokens); 366 tokens = NULL; 342 367 } 368 369 CSLDestroy(tokens); 370 CPLFree(topic); 371 343 372 return ret; 344 373 } 345 374 … … 512 541 int fIndex; 513 542 514 543 OGRFeatureDefn *featureDef = curLayer->GetLayerDefn(); 515 OGRFieldDefn *fieldDef = NULL;516 544 OGRFeature *feature = NULL; 517 545 518 546 long fpos = VSIFTell(fpItf); … … 545 573 //Model not read - use heuristics 546 574 for (fIndex=1; fIndex<CSLCount(tokens); fIndex++) 547 575 { 548 fieldDef = new OGRFieldDefn(CPLStrdup("Field00"), OFTString);549 *(char *)(fieldDef->GetNameRef()+strlen(fieldDef->GetNameRef())-2) = '0'+fIndex/10;550 *(char *)(fieldDef->GetNameRef()+strlen(fieldDef->GetNameRef())-1) = '0'+fIndex%10;551 featureDef->AddFieldDefn( fieldDef);576 char szFieldName[32]; 577 sprintf(szFieldName, "Field%02d", fIndex); 578 OGRFieldDefn oFieldDefn(szFieldName, OFTString); 579 featureDef->AddFieldDefn(&oFieldDefn); 552 580 } 553 581 } 554 582 … … 560 588 { 561 589 if (!EQUAL(tokens[fIndex], "@")) { 562 590 //CPLDebug( "OGR_ILI", "Adding Field %d: %s", fieldno, tokens[fIndex]); 563 feature->SetField(fieldno, CPLStrdup(tokens[fIndex]));591 feature->SetField(fieldno, tokens[fIndex]); 564 592 if (featureDef->GetFieldDefn(fieldno)->GetType() == OFTReal 565 593 && fieldno > 0 566 594 && featureDef->GetFieldDefn(fieldno-1)->GetType() == OFTReal … … 732 760 void ILI1Reader::AddLayer( OGRILI1Layer * poNewLayer ) 733 761 734 762 { 763 nLayers++; 764 735 765 papoLayers = (OGRILI1Layer **) 736 CPLRealloc( papoLayers, sizeof(void*) * ++nLayers );766 CPLRealloc( papoLayers, sizeof(void*) * nLayers ); 737 767 738 768 papoLayers[nLayers-1] = poNewLayer; 739 769 } … … 843 873 844 874 pszLine = CPLReadLine( fpItf ); 845 875 conttok = CSLTokenizeString2( pszLine, " ", CSLT_PRESERVEESCAPES ); 846 if (!conttok || !EQUAL(conttok[0], "CONT")) break; 876 if (!conttok || !EQUAL(conttok[0], "CONT")) 877 { 878 CSLDestroy(conttok); 879 break; 880 } 847 881 848 882 //append 849 883 tokens = CSLInsertStrings(tokens, -1, &conttok[1]); … … 859 893 IILI1Reader *CreateILI1Reader() { 860 894 return new ILI1Reader(); 861 895 } 896 897 void DestroyILI1Reader(IILI1Reader* reader) 898 { 899 if (reader) 900 delete reader; 901 } -
ogr/ogrsf_frmts/ili/ili1reader.h
old new 47 47 }; 48 48 49 49 IILI1Reader *CreateILI1Reader(); 50 void DestroyILI1Reader(IILI1Reader* reader); 50 51 51 52 #endif
