OGRErr OGRKMLLayer::CreateField( OGRFieldDefn *poField, CPL_UNUSED int bApproxOK ) { if( !bWriter_ || iNextKMLId_ != 0 ) return OGRERR_FAILURE; OGRFieldDefn oCleanCopy( poField ); poFeatureDefn_->AddFieldDefn( &oCleanCopy ); return OGRERR_NONE; }
OGRErr OGRGMLLayer::CreateField( OGRFieldDefn *poField, int bApproxOK ) { if( !bWriter || iNextGMLId != 0 ) return OGRERR_FAILURE; /* -------------------------------------------------------------------- */ /* Enforce XML naming semantics on element name. */ /* -------------------------------------------------------------------- */ OGRFieldDefn oCleanCopy( poField ); char *pszName = CPLStrdup( poField->GetNameRef() ); CPLCleanXMLElementName( pszName ); if( strcmp(pszName,poField->GetNameRef()) != 0 ) { if( !bApproxOK ) { CPLFree( pszName ); CPLError( CE_Failure, CPLE_AppDefined, "Unable to create field with name '%s', it would not\n" "be valid as an XML element name.", poField->GetNameRef() ); return OGRERR_FAILURE; } oCleanCopy.SetName( pszName ); CPLError( CE_Warning, CPLE_AppDefined, "Field name '%s' adjusted to '%s' to be a valid\n" "XML element name.", poField->GetNameRef(), pszName ); } CPLFree( pszName ); poFeatureDefn->AddFieldDefn( &oCleanCopy ); return OGRERR_NONE; }