Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

gdalopen.cpp

00001 /******************************************************************************
00002  * Copyright (c) 1998, Frank Warmerdam
00003  *
00004  * Permission is hereby granted, free of charge, to any person obtaining a
00005  * copy of this software and associated documentation files (the "Software"),
00006  * to deal in the Software without restriction, including without limitation
00007  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00008  * and/or sell copies of the Software, and to permit persons to whom the
00009  * Software is furnished to do so, subject to the following conditions:
00010  *
00011  * The above copyright notice and this permission notice shall be included
00012  * in all copies or substantial portions of the Software.
00013  *
00014  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00015  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00016  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00017  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00018  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00019  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00020  * DEALINGS IN THE SOFTWARE.
00021  ******************************************************************************
00022  *
00023  * gdalopen.c
00024  *
00025  * GDALOpen() function, and supporting functions.
00026  *
00027  * 
00028  * $Log: gdalopen_cpp-source.html,v $
00028  * Revision 1.8  2001/07/05 13:24:08  warmerda
00028  * *** empty log message ***
00028  *
00029  * Revision 1.9  2001/01/03 05:32:20  warmerda
00030  * avoid depending on VSIStatBuf file size for 2GB issues
00031  *
00032  * Revision 1.8  2000/04/21 21:55:53  warmerda
00033  * set filename as description of GDALDatasets.
00034  *
00035  * Revision 1.7  2000/01/10 15:43:06  warmerda
00036  * Fixed debug statement.
00037  *
00038  * Revision 1.6  2000/01/10 15:31:02  warmerda
00039  * Added debug statement in GDALOpen.
00040  *
00041  * Revision 1.5  1999/11/11 21:59:07  warmerda
00042  * added GetDriver() for datasets
00043  *
00044  * Revision 1.4  1999/10/01 14:44:02  warmerda
00045  * added documentation
00046  *
00047  * Revision 1.3  1999/04/21 04:00:34  warmerda
00048  * Initialize fp to NULL.
00049  *
00050  * Revision 1.2  1998/12/31 18:52:45  warmerda
00051  * Use CPL memory functions (they are safe), and fixed up header reading.
00052  *
00053  * Revision 1.1  1998/12/03 18:31:45  warmerda
00054  * New
00055  *
00056  */
00057 
00058 #include "gdal_priv.h"
00059 #include "cpl_conv.h"
00060 
00061 /************************************************************************/
00062 /* ==================================================================== */
00063 /*                             GDALOpenInfo                             */
00064 /* ==================================================================== */
00065 /************************************************************************/
00066 
00067 /************************************************************************/
00068 /*                            GDALOpenInfo()                            */
00069 /************************************************************************/
00070 
00071 GDALOpenInfo::GDALOpenInfo( const char * pszFilenameIn, GDALAccess eAccessIn )
00072 
00073 {
00074     pszFilename = CPLStrdup( pszFilenameIn );
00075 
00076     nHeaderBytes = 0;
00077     pabyHeader = NULL;
00078     bStatOK = FALSE;
00079     eAccess = eAccessIn;
00080     fp = NULL;
00081     
00082 /* -------------------------------------------------------------------- */
00083 /*      Collect information about the file.                             */
00084 /* -------------------------------------------------------------------- */
00085     if( VSIStat( pszFilename, &sStat ) == 0 )
00086     {
00087         bStatOK = TRUE;
00088 
00089         if( VSI_ISREG( sStat.st_mode ) )
00090         {
00091             pabyHeader = (GByte *) CPLCalloc(1025,1);
00092 
00093             fp = VSIFOpen( pszFilename, "rb" );
00094 
00095             if( fp != NULL )
00096             {
00097                 nHeaderBytes = VSIFRead( pabyHeader, 1, 1024, fp );
00098 
00099                 VSIRewind( fp );
00100             }
00101         }
00102     }
00103 }
00104 
00105 /************************************************************************/
00106 /*                           ~GDALOpenInfo()                            */
00107 /************************************************************************/
00108 
00109 GDALOpenInfo::~GDALOpenInfo()
00110 
00111 {
00112     VSIFree( pabyHeader );
00113     CPLFree( pszFilename );
00114 
00115     if( fp != NULL )
00116         VSIFClose( fp );
00117 }
00118 
00119 /************************************************************************/
00120 /*                              GDALOpen()                              */
00121 /************************************************************************/
00122 
00138 GDALDatasetH GDALOpen( const char * pszFilename, GDALAccess eAccess )
00139 
00140 {
00141     int         iDriver;
00142     GDALDriverManager *poDM = GetGDALDriverManager();
00143     GDALOpenInfo oOpenInfo( pszFilename, eAccess );
00144 
00145     CPLErrorReset();
00146     
00147     for( iDriver = 0; iDriver < poDM->GetDriverCount(); iDriver++ )
00148     {
00149         GDALDriver      *poDriver = poDM->GetDriver( iDriver );
00150         GDALDataset     *poDS;
00151 
00152         poDS = poDriver->pfnOpen( &oOpenInfo );
00153         if( poDS != NULL )
00154         {
00155             poDS->SetDescription( pszFilename );
00156 
00157             if( poDS->poDriver == NULL )
00158                 poDS->poDriver = poDriver;
00159 
00160             CPLDebug( "GDAL", "GDALOpen(%s) succeeds as %s.\n",
00161                       pszFilename, poDriver->pszLongName );
00162 
00163             return (GDALDatasetH) poDS;
00164         }
00165 
00166         if( CPLGetLastErrorNo() != 0 )
00167             return NULL;
00168     }
00169 
00170     CPLError( CE_Failure, CPLE_OpenFailed,
00171               "`%s' not recognised as a supported file format.\n",
00172               pszFilename );
00173               
00174     return NULL;
00175 }
00176 

Generated at Thu Jul 5 09:16:13 2001 for GDAL by doxygen1.2.3-20001105 written by Dimitri van Heesch, © 1997-2000