Example #1
0
OGRErr OGRMILayerAttrIndex::Initialize( const char *pszIndexPathIn, 
                                        OGRLayer *poLayerIn )

{
    if( poLayerIn == poLayer )
        return OGRERR_NONE;

/* -------------------------------------------------------------------- */
/*      Capture input information and form static pathnames.            */
/* -------------------------------------------------------------------- */
    poLayer = poLayerIn;

    pszIndexPath = CPLStrdup( pszIndexPathIn );
    
    pszMetadataFilename = CPLStrdup(
        CPLResetExtension( pszIndexPathIn, "idm" ) );
    
    pszMIINDFilename = CPLStrdup(CPLResetExtension( pszIndexPathIn, "ind" ));

/* -------------------------------------------------------------------- */
/*      If a metadata file already exists, load it.                     */
/* -------------------------------------------------------------------- */
    OGRErr eErr;
    VSIStatBuf sStat;

    if( VSIStat( pszMetadataFilename, &sStat ) == 0 )
    {
        eErr = LoadConfigFromXML();
        if( eErr != OGRERR_NONE )
            return eErr;
    }

    return OGRERR_NONE;
}
Example #2
0
OGRErr OGRMILayerAttrIndex::LoadConfigFromXML()
{
    FILE *fp;
    int  nXMLSize;
    char *pszRawXML;

    CPLAssert( poINDFile == NULL );

/* -------------------------------------------------------------------- */
/*      Read the XML file.                                              */
/* -------------------------------------------------------------------- */
    fp = VSIFOpen( pszMetadataFilename, "rb" );
    if( fp == NULL )
        return OGRERR_NONE;

    VSIFSeek( fp, 0, SEEK_END );
    nXMLSize = VSIFTell( fp );
    VSIFSeek( fp, 0, SEEK_SET );

    pszRawXML = (char *) CPLMalloc(nXMLSize+1);
    pszRawXML[nXMLSize] = '\0';
    VSIFRead( pszRawXML, nXMLSize, 1, fp );

    VSIFClose( fp );

    OGRErr eErr = LoadConfigFromXML(pszRawXML);
    CPLFree(pszRawXML);

    return eErr;
}
Example #3
0
OGRErr OGRMILayerAttrIndex::LoadConfigFromXML()
{
    VSILFILE *fp;
    vsi_l_offset  nXMLSize;
    char *pszRawXML;

    CPLAssert( poINDFile == NULL );

/* -------------------------------------------------------------------- */
/*      Read the XML file.                                              */
/* -------------------------------------------------------------------- */
    fp = VSIFOpenL( pszMetadataFilename, "rb" );
    if( fp == NULL )
        return OGRERR_FAILURE;

    if( VSIFSeekL( fp, 0, SEEK_END ) != 0 )
    {
        VSIFCloseL(fp);
        return OGRERR_FAILURE;
    }
    nXMLSize = VSIFTellL( fp );
    if( nXMLSize > 10 * 1024 * 1024 ||
        VSIFSeekL( fp, 0, SEEK_SET ) != 0 )
    {
        VSIFCloseL(fp);
        return OGRERR_FAILURE;
    }

    pszRawXML = (char *) CPLMalloc((size_t)nXMLSize+1);
    pszRawXML[nXMLSize] = '\0';
    if( VSIFReadL( pszRawXML, (size_t)nXMLSize, 1, fp ) != 1 )
    {
        VSIFCloseL(fp);
        return OGRERR_FAILURE;
    }

    VSIFCloseL( fp );

    OGRErr eErr = LoadConfigFromXML(pszRawXML);
    CPLFree(pszRawXML);

    return eErr;
}
Example #4
0
OGRErr OGRMILayerAttrIndex::LoadConfigFromXML()
{
    CPLAssert( poINDFile == nullptr );

/* -------------------------------------------------------------------- */
/*      Read the XML file.                                              */
/* -------------------------------------------------------------------- */
    VSILFILE *fp = VSIFOpenL( pszMetadataFilename, "rb" );
    if( fp == nullptr )
        return OGRERR_FAILURE;

    if( VSIFSeekL( fp, 0, SEEK_END ) != 0 )
    {
        VSIFCloseL(fp);
        return OGRERR_FAILURE;
    }
    const vsi_l_offset nXMLSize = VSIFTellL( fp );
    if( nXMLSize > 10 * 1024 * 1024 ||
        VSIFSeekL( fp, 0, SEEK_SET ) != 0 )
    {
        VSIFCloseL(fp);
        return OGRERR_FAILURE;
    }

    char *pszRawXML = static_cast<char *>(CPLMalloc(static_cast<size_t>(nXMLSize)+1));
    pszRawXML[nXMLSize] = '\0';
    if( VSIFReadL( pszRawXML, static_cast<size_t>(nXMLSize), 1, fp ) != 1 )
    {
        VSIFCloseL(fp);
        return OGRERR_FAILURE;
    }

    VSIFCloseL( fp );

    OGRErr eErr = LoadConfigFromXML(pszRawXML);
    CPLFree(pszRawXML);

    return eErr;
}