Unfortunately, I really don't have the time. I am glad to provide the fix, but whether you choose to apply it or keep a broken implementation is up to you.
> Date: Fri, 4 Nov 2011 16:54:09 -0200 > Subject: Re: [gdal-dev] Patch for s57reader.cpp > From: etourigny....@gmail.com > To: mrx...@hotmail.com > CC: gdal-dev@lists.osgeo.org > > Dear Mike, > > Please add this to a relevant ticket, or create one and add it there. > > http://trac.osgeo.org/gdal/report > > thanks, Etienne > > On Fri, Nov 4, 2011 at 4:27 PM, <mrx...@hotmail.com> wrote: > > Dear all, > > > > Included is a patch for s57reader.cpp that properly applies updates for > > certain types of charts. > > > > The essence of this patch is that SG2D field may not be present in > > original record, and must be added if update is trying to insert SG2D > > fields. > > > > The patch was made against our modified version of OGR, so line numbers > > likely do not match and certain function signatures may need to be > > updated. If you'd like to apply it - make sure it goes in the > > S57Reader::ApplyRecordUpdate. > > > > Best, > > -- > > Mike > > > > > > > > Index: s57reader.cpp > > =================================================================== > > --- s57reader.cpp (revision 0000) > > +++ s57reader.cpp (working copy) > > @@ -2635,16 +2635,30 @@ > > /* If we don't have SG2D, check for SG3D */ > > if( poDstSG2D == NULL ) > > { > > - poSrcSG2D = poUpdate->FindField("SG3D"); > > poDstSG2D = poTarget->FindField("SG3D"); > > + if (poDstSG2D != NULL) { > > + poSrcSG2D = poUpdate->FindField("SG3D"); > > + } > > } > > > > - if( (poSrcSG2D == NULL && nCCUI != 2) || poDstSG2D == NULL ) > > + if( (poSrcSG2D == NULL && nCCUI != 2) || (poDstSG2D == NULL && > > nCCUI != 1) ) > > { > > CPLAssert( FALSE ); > > return FALSE; > > } > > > > + if (poDstSG2D == NULL) { > > + poTarget->AddField(poTarget->GetModule()->FindFieldDefn("SG2D")); > > + poDstSG2D = poTarget->FindField("SG2D"); > > + if (poDstSG2D == NULL) { > > + CPLAssert( FALSE ); > > + return FALSE; > > + } > > + > > + // Delete null default data that was created > > + poTarget->SetFieldRaw( poDstSG2D, 0, NULL, 0 ); > > + } > > + > > nCoordSize = poDstSG2D->GetFieldDefn()->GetFixedWidth(); > > > > if( nCCUI == 1 ) /* INSERT */ > > > > _______________________________________________ > > gdal-dev mailing list > > gdal-dev@lists.osgeo.org > > http://lists.osgeo.org/mailman/listinfo/gdal-dev > >
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev