Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > d67485fb8ce60f8952179bbde3b5d022 > files > 53

libgdal0-devel-1.1.7-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta name="robots" content="noindex">
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>cpl_path.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.3-20001105 on Thu Mar 28 09:47:28 2002 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>cpl_path.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/**********************************************************************</font>
00002 <font class="comment"> * $Id: cpl_path_cpp-source.html,v 1.10 2002/04/16 13:11:47 warmerda Exp $</font>
00003 <font class="comment"> *</font>
00004 <font class="comment"> * Project:  CPL - Common Portability Library</font>
00005 <font class="comment"> * Purpose:  Portable filename/path parsing, and forming ala "Glob API".</font>
00006 <font class="comment"> * Author:   Frank Warmerdam, warmerda@home.com</font>
00007 <font class="comment"> *</font>
00008 <font class="comment"> **********************************************************************</font>
00009 <font class="comment"> * Copyright (c) 1999, Frank Warmerdam</font>
00010 <font class="comment"> *</font>
00011 <font class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</font>
00012 <font class="comment"> * copy of this software and associated documentation files (the "Software"),</font>
00013 <font class="comment"> * to deal in the Software without restriction, including without limitation</font>
00014 <font class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</font>
00015 <font class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</font>
00016 <font class="comment"> * Software is furnished to do so, subject to the following conditions:</font>
00017 <font class="comment"> * </font>
00018 <font class="comment"> * The above copyright notice and this permission notice shall be included</font>
00019 <font class="comment"> * in all copies or substantial portions of the Software.</font>
00020 <font class="comment"> * </font>
00021 <font class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</font>
00022 <font class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</font>
00023 <font class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL</font>
00024 <font class="comment"> * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</font>
00025 <font class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</font>
00026 <font class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER </font>
00027 <font class="comment"> * DEALINGS IN THE SOFTWARE.</font>
00028 <font class="comment"> **********************************************************************</font>
00029 <font class="comment"> *</font>
00030 <font class="comment"> * $Log: cpl_path_cpp-source.html,v $
00030 <font class="comment"> * Revision 1.10  2002/04/16 13:11:47  warmerda
00030 <font class="comment"> * updated
00030 <font class="comment"> *</font>
00031 <font class="comment"> * Revision 1.9  2001/08/30 21:20:49  warmerda</font>
00032 <font class="comment"> * expand tabs</font>
00033 <font class="comment"> *</font>
00034 <font class="comment"> * Revision 1.8  2001/07/18 04:00:49  warmerda</font>
00035 <font class="comment"> * added CPL_CVSID</font>
00036 <font class="comment"> *</font>
00037 <font class="comment"> * Revision 1.7  2001/05/12 19:20:55  warmerda</font>
00038 <font class="comment"> * Fixed documentation of CPLGetExtension().</font>
00039 <font class="comment"> *</font>
00040 <font class="comment"> * Revision 1.6  2001/03/16 22:15:08  warmerda</font>
00041 <font class="comment"> * added CPLResetExtension</font>
00042 <font class="comment"> *</font>
00043 <font class="comment"> * Revision 1.5  2001/02/24 01:53:57  warmerda</font>
00044 <font class="comment"> * Added CPLFormCIFilename()</font>
00045 <font class="comment"> *</font>
00046 <font class="comment"> * Revision 1.4  2001/01/19 21:18:25  warmerda</font>
00047 <font class="comment"> * expanded tabs</font>
00048 <font class="comment"> *</font>
00049 <font class="comment"> * Revision 1.3  2000/01/26 17:53:36  warmerda</font>
00050 <font class="comment"> * Fixed CPLGetExtension() for filenames with no extension.</font>
00051 <font class="comment"> *</font>
00052 <font class="comment"> * Revision 1.2  2000/01/24 19:32:59  warmerda</font>
00053 <font class="comment"> * Fixed CPLGetExtension() to not include the dot.</font>
00054 <font class="comment"> *</font>
00055 <font class="comment"> * Revision 1.1  1999/10/14 19:23:39  warmerda</font>
00056 <font class="comment"> * New</font>
00057 <font class="comment"> *</font>
00058 <font class="comment"> **********************************************************************/</font>
00059 
00060 <font class="preprocessor">#include "<a class="code" href="cpl_conv_h.html">cpl_conv.h</a>"</font>
00061 <font class="preprocessor">#include "cpl_string.h"</font>
00062 
00063 CPL_CVSID(<font class="stringliteral">"$Id: cpl_path_cpp-source.html,v 1.10 2002/04/16 13:11:47 warmerda Exp $"</font>);
00064 
00065 
00066 <font class="keyword">static</font> <font class="keywordtype">char</font>     szStaticResult[1024]; <font class="comment">/* should be size of larged possible</font>
00067 <font class="comment">                                         filename */</font>
00068 
00069 <font class="comment">/************************************************************************/</font>
00070 <font class="comment">/*                        CPLFindFilenameStart()                        */</font>
00071 <font class="comment">/************************************************************************/</font>
00072 
00073 <font class="keyword">static</font> <font class="keywordtype">int</font> CPLFindFilenameStart( <font class="keyword">const</font> <font class="keywordtype">char</font> * pszFilename )<font class="keyword"></font>
00074 <font class="keyword"></font>
00075 <font class="keyword"></font>{
00076     <font class="keywordtype">int</font>         iFileStart;
00077 
00078     <font class="keywordflow">for</font>( iFileStart = strlen(pszFilename);
00079          iFileStart &gt; 0
00080              &amp;&amp; pszFilename[iFileStart-1] != <font class="charliteral">'/'</font>
00081              &amp;&amp; pszFilename[iFileStart-1] != <font class="charliteral">'\\'</font>;
00082          iFileStart-- ) {}
00083 
00084     <font class="keywordflow">return</font> iFileStart;
00085 }
00086 
00087 <font class="comment">/************************************************************************/</font>
00088 <font class="comment">/*                             CPLGetPath()                             */</font>
00089 <font class="comment">/************************************************************************/</font>
00090 
00112 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a10">CPLGetPath</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFilename )<font class="keyword"></font>
00113 <font class="keyword"></font>
00114 <font class="keyword"></font>{
00115     <font class="keywordtype">int</font>         iFileStart = CPLFindFilenameStart(pszFilename);
00116 
00117     <font class="keywordflow">if</font>( iFileStart == 0 )
00118     {
00119         strcpy( szStaticResult, <font class="stringliteral">""</font> );
00120         <font class="keywordflow">return</font> szStaticResult;
00121     }
00122 
00123     strncpy( szStaticResult, pszFilename, iFileStart );
00124     szStaticResult[iFileStart] = <font class="charliteral">'\0'</font>;
00125 
00126     <font class="keywordflow">if</font>( iFileStart &gt; 1
00127         &amp;&amp; (szStaticResult[iFileStart-1] == <font class="charliteral">'/'</font>
00128             || szStaticResult[iFileStart-1] == <font class="charliteral">'\\'</font>) )
00129         szStaticResult[iFileStart-1] = <font class="charliteral">'\0'</font>;
00130 
00131     <font class="keywordflow">return</font> szStaticResult;
00132 }
00133 
00134 <font class="comment">/************************************************************************/</font>
00135 <font class="comment">/*                           CPLGetFilename()                           */</font>
00136 <font class="comment">/************************************************************************/</font>
00137 
00158 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a11">CPLGetFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullFilename )<font class="keyword"></font>
00159 <font class="keyword"></font>
00160 <font class="keyword"></font>{
00161     <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart( pszFullFilename );
00162 
00163     strcpy( szStaticResult, pszFullFilename + iFileStart );
00164 
00165     <font class="keywordflow">return</font> szStaticResult;
00166 }
00167 
00168 <font class="comment">/************************************************************************/</font>
00169 <font class="comment">/*                           CPLGetBasename()                           */</font>
00170 <font class="comment">/************************************************************************/</font>
00171 
00192 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a12">CPLGetBasename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullFilename )<font class="keyword"></font>
00193 <font class="keyword"></font>
00194 <font class="keyword"></font>{
00195     <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart( pszFullFilename );
00196     <font class="keywordtype">int</font> iExtStart, nLength;
00197 
00198     <font class="keywordflow">for</font>( iExtStart = strlen(pszFullFilename);
00199          iExtStart &gt; iFileStart &amp;&amp; pszFullFilename[iExtStart] != <font class="charliteral">'.'</font>;
00200          iExtStart-- ) {}
00201 
00202     <font class="keywordflow">if</font>( iExtStart == iFileStart )
00203         iExtStart = strlen(pszFullFilename);
00204 
00205     nLength = iExtStart - iFileStart;
00206 
00207     strncpy( szStaticResult, pszFullFilename + iFileStart, nLength );
00208     szStaticResult[nLength] = <font class="charliteral">'\0'</font>;
00209 
00210     <font class="keywordflow">return</font> szStaticResult;
00211 }
00212 
00213 
00214 <font class="comment">/************************************************************************/</font>
00215 <font class="comment">/*                           CPLGetExtension()                          */</font>
00216 <font class="comment">/************************************************************************/</font>
00217 
00237 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a13">CPLGetExtension</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullFilename )<font class="keyword"></font>
00238 <font class="keyword"></font>
00239 <font class="keyword"></font>{
00240     <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart( pszFullFilename );
00241     <font class="keywordtype">int</font> iExtStart;
00242 
00243     <font class="keywordflow">for</font>( iExtStart = strlen(pszFullFilename);
00244          iExtStart &gt; iFileStart &amp;&amp; pszFullFilename[iExtStart] != <font class="charliteral">'.'</font>;
00245          iExtStart-- ) {}
00246 
00247     <font class="keywordflow">if</font>( iExtStart == iFileStart )
00248         iExtStart = strlen(pszFullFilename)-1;
00249 
00250     strcpy( szStaticResult, pszFullFilename+iExtStart+1 );
00251 
00252     <font class="keywordflow">return</font> szStaticResult;
00253 }
00254 
00255 <font class="comment">/************************************************************************/</font>
00256 <font class="comment">/*                         CPLResetExtension()                          */</font>
00257 <font class="comment">/************************************************************************/</font>
00258 
00270 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a16">CPLResetExtension</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszPath, <font class="keyword">const</font> <font class="keywordtype">char</font> *pszExt )<font class="keyword"></font>
00271 <font class="keyword"></font>
00272 <font class="keyword"></font>{
00273     <font class="keywordtype">int</font>         i;
00274 
00275 <font class="comment">/* -------------------------------------------------------------------- */</font>
00276 <font class="comment">/*      First, try and strip off any existing extension.                */</font>
00277 <font class="comment">/* -------------------------------------------------------------------- */</font>
00278     strcpy( szStaticResult, pszPath );
00279     <font class="keywordflow">for</font>( i = strlen(szStaticResult)-1; i &gt; 0; i-- )
00280     {
00281         <font class="keywordflow">if</font>( szStaticResult[i] == <font class="charliteral">'.'</font> )
00282         {
00283             szStaticResult[i] = <font class="charliteral">'\0'</font>;
00284             <font class="keywordflow">break</font>;
00285         }
00286 
00287         <font class="keywordflow">if</font>( szStaticResult[i] == <font class="charliteral">'/'</font> || szStaticResult[i] == <font class="charliteral">'\\'</font> 
00288             || szStaticResult[i] == <font class="charliteral">':'</font> )
00289             <font class="keywordflow">break</font>;
00290     }
00291 
00292 <font class="comment">/* -------------------------------------------------------------------- */</font>
00293 <font class="comment">/*      Append the new extension.                                       */</font>
00294 <font class="comment">/* -------------------------------------------------------------------- */</font>
00295     strcat( szStaticResult, <font class="stringliteral">"."</font> );
00296     strcat( szStaticResult, pszExt );
00297 
00298     <font class="keywordflow">return</font> szStaticResult;
00299 }
00300 
00301 <font class="comment">/************************************************************************/</font>
00302 <font class="comment">/*                          CPLFormFilename()                           */</font>
00303 <font class="comment">/************************************************************************/</font>
00304 
00333 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a14">CPLFormFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> * pszPath,
00334                              <font class="keyword">const</font> <font class="keywordtype">char</font> * pszBasename,
00335                              <font class="keyword">const</font> <font class="keywordtype">char</font> * pszExtension )<font class="keyword"></font>
00336 <font class="keyword"></font>
00337 <font class="keyword"></font>{
00338     <font class="keyword">const</font> <font class="keywordtype">char</font>  *pszAddedPathSep = <font class="stringliteral">""</font>;
00339     <font class="keyword">const</font> <font class="keywordtype">char</font>  *pszAddedExtSep = <font class="stringliteral">""</font>;
00340 
00341     <font class="keywordflow">if</font>( pszPath == NULL )
00342         pszPath = <font class="stringliteral">""</font>;
00343     <font class="keywordflow">else</font> <font class="keywordflow">if</font>( strlen(pszPath) &gt; 0
00344              &amp;&amp; pszPath[strlen(pszPath)-1] != <font class="charliteral">'/'</font>
00345              &amp;&amp; pszPath[strlen(pszPath)-1] != <font class="charliteral">'\\'</font> )
00346 <font class="preprocessor">#ifdef WIN32        </font>
00347 <font class="preprocessor"></font>        pszAddedPathSep = <font class="stringliteral">"\\"</font>;
00348 <font class="preprocessor">#else    </font>
00349 <font class="preprocessor"></font>        pszAddedPathSep = <font class="stringliteral">"/"</font>;
00350 <font class="preprocessor">#endif        </font>
00351 <font class="preprocessor"></font>
00352     <font class="keywordflow">if</font>( pszExtension == NULL )
00353         pszExtension = <font class="stringliteral">""</font>;
00354     <font class="keywordflow">else</font> <font class="keywordflow">if</font>( pszExtension[0] != <font class="charliteral">'.'</font> &amp;&amp; strlen(pszExtension) &gt; 0 )
00355         pszAddedExtSep = <font class="stringliteral">"."</font>;
00356 
00357     sprintf( szStaticResult, <font class="stringliteral">"%s%s%s%s%s"</font>,
00358              pszPath, pszAddedPathSep,
00359              pszBasename,
00360              pszAddedExtSep, pszExtension );
00361 
00362     <font class="keywordflow">return</font> szStaticResult;
00363 }
00364 
00365 <font class="comment">/************************************************************************/</font>
00366 <font class="comment">/*                          CPLFormCIFilename()                         */</font>
00367 <font class="comment">/************************************************************************/</font>
00368 
00393 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a15">CPLFormCIFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> * pszPath,
00394                                <font class="keyword">const</font> <font class="keywordtype">char</font> * pszBasename,
00395                                <font class="keyword">const</font> <font class="keywordtype">char</font> * pszExtension )<font class="keyword"></font>
00396 <font class="keyword"></font>
00397 <font class="keyword"></font>{
00398 <font class="preprocessor">#ifdef WIN32</font>
00399 <font class="preprocessor"></font>    <font class="keywordflow">return</font> <a class="code" href="cpl_conv_h.html#a14">CPLFormFilename</a>( pszPath, pszBasename, pszExtension );
00400 <font class="preprocessor">#else</font>
00401 <font class="preprocessor"></font>    <font class="keyword">const</font> <font class="keywordtype">char</font>  *pszAddedExtSep = <font class="stringliteral">""</font>;
00402     <font class="keywordtype">char</font>        *pszFilename;
00403     <font class="keyword">const</font> <font class="keywordtype">char</font>  *pszFullPath;
00404     <font class="keywordtype">int</font>         nLen = strlen(pszBasename)+2, i;
00405     FILE        *fp;
00406 
00407     <font class="keywordflow">if</font>( pszExtension != NULL )
00408         nLen += strlen(pszExtension);
00409 
00410     pszFilename = (<font class="keywordtype">char</font> *) <a class="code" href="cpl_conv_h.html#a3">CPLMalloc</a>(nLen);
00411 
00412     <font class="keywordflow">if</font>( pszExtension == NULL )
00413         pszExtension = <font class="stringliteral">""</font>;
00414     <font class="keywordflow">else</font> <font class="keywordflow">if</font>( pszExtension[0] != <font class="charliteral">'.'</font> &amp;&amp; strlen(pszExtension) &gt; 0 )
00415         pszAddedExtSep = <font class="stringliteral">"."</font>;
00416 
00417     sprintf( pszFilename, <font class="stringliteral">"%s%s%s"</font>, 
00418              pszBasename, pszAddedExtSep, pszExtension );
00419 
00420     pszFullPath = <a class="code" href="cpl_conv_h.html#a14">CPLFormFilename</a>( pszPath, pszFilename, NULL );
00421     fp = VSIFOpen( pszFullPath, <font class="stringliteral">"r"</font> );
00422     <font class="keywordflow">if</font>( fp == NULL )
00423     {
00424         <font class="keywordflow">for</font>( i = 0; pszFilename[i] != <font class="charliteral">'\0'</font>; i++ )
00425         {
00426             <font class="keywordflow">if</font>( pszFilename[i] &gt;= <font class="charliteral">'a'</font> &amp;&amp; pszFilename[i] &lt;= <font class="charliteral">'z'</font> )
00427                 pszFilename[i] = pszFilename[i] + <font class="charliteral">'A'</font> - <font class="charliteral">'a'</font>;
00428         }
00429 
00430         pszFullPath = <a class="code" href="cpl_conv_h.html#a14">CPLFormFilename</a>( pszPath, pszFilename, NULL );
00431         fp = VSIFOpen( pszFullPath, <font class="stringliteral">"r"</font> );
00432     }
00433 
00434     <font class="keywordflow">if</font>( fp == NULL )
00435     {
00436         <font class="keywordflow">for</font>( i = 0; pszFilename[i] != <font class="charliteral">'\0'</font>; i++ )
00437         {
00438             <font class="keywordflow">if</font>( pszFilename[i] &gt;= <font class="charliteral">'A'</font> &amp;&amp; pszFilename[i] &lt;= <font class="charliteral">'Z'</font> )
00439                 pszFilename[i] = pszFilename[i] + <font class="charliteral">'a'</font> - <font class="charliteral">'A'</font>;
00440         }
00441 
00442         pszFullPath = <a class="code" href="cpl_conv_h.html#a14">CPLFormFilename</a>( pszPath, pszFilename, NULL );
00443         fp = VSIFOpen( pszFullPath, <font class="stringliteral">"r"</font> );
00444     }
00445 
00446     <font class="keywordflow">if</font>( fp != NULL )
00447         VSIFClose( fp );
00448     <font class="keywordflow">else</font>
00449         pszFullPath = <a class="code" href="cpl_conv_h.html#a14">CPLFormFilename</a>( pszPath, pszBasename, pszExtension );
00450 
00451     CPLFree( pszFilename );
00452 
00453     <font class="keywordflow">return</font> pszFullPath;
00454 <font class="preprocessor">#endif</font>
00455 <font class="preprocessor"></font>}
</div></pre><hr><address><small>Generated at Thu Mar 28 09:47:28 2002 for GDAL by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.3-20001105 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2000</small></address>
</body>
</html>