<!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 Sat Dec 21 14:01:57 2002 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> </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.13 2002/12/21 19:13:12 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.13 2002/12/21 19:13:12 warmerda 00030 <font class="comment"> * updated 00030 <font class="comment"> *</font> 00031 <font class="comment"> * Revision 1.12 2002/12/13 06:14:17 warmerda</font> 00032 <font class="comment"> * fixed bug with IsRelative function</font> 00033 <font class="comment"> *</font> 00034 <font class="comment"> * Revision 1.11 2002/12/13 06:00:54 warmerda</font> 00035 <font class="comment"> * added CPLProjectRelativeFilename() and CPLIsFilenameRelative()</font> 00036 <font class="comment"> *</font> 00037 <font class="comment"> * Revision 1.10 2002/08/15 09:23:24 dron</font> 00038 <font class="comment"> * Added CPLGetDirname() function</font> 00039 <font class="comment"> *</font> 00040 <font class="comment"> * Revision 1.9 2001/08/30 21:20:49 warmerda</font> 00041 <font class="comment"> * expand tabs</font> 00042 <font class="comment"> *</font> 00043 <font class="comment"> * Revision 1.8 2001/07/18 04:00:49 warmerda</font> 00044 <font class="comment"> * added CPL_CVSID</font> 00045 <font class="comment"> *</font> 00046 <font class="comment"> * Revision 1.7 2001/05/12 19:20:55 warmerda</font> 00047 <font class="comment"> * Fixed documentation of CPLGetExtension().</font> 00048 <font class="comment"> *</font> 00049 <font class="comment"> * Revision 1.6 2001/03/16 22:15:08 warmerda</font> 00050 <font class="comment"> * added CPLResetExtension</font> 00051 <font class="comment"> *</font> 00052 <font class="comment"> * Revision 1.5 2001/02/24 01:53:57 warmerda</font> 00053 <font class="comment"> * Added CPLFormCIFilename()</font> 00054 <font class="comment"> *</font> 00055 <font class="comment"> * Revision 1.4 2001/01/19 21:18:25 warmerda</font> 00056 <font class="comment"> * expanded tabs</font> 00057 <font class="comment"> *</font> 00058 <font class="comment"> * Revision 1.3 2000/01/26 17:53:36 warmerda</font> 00059 <font class="comment"> * Fixed CPLGetExtension() for filenames with no extension.</font> 00060 <font class="comment"> *</font> 00061 <font class="comment"> * Revision 1.2 2000/01/24 19:32:59 warmerda</font> 00062 <font class="comment"> * Fixed CPLGetExtension() to not include the dot.</font> 00063 <font class="comment"> *</font> 00064 <font class="comment"> * Revision 1.1 1999/10/14 19:23:39 warmerda</font> 00065 <font class="comment"> * New</font> 00066 <font class="comment"> *</font> 00067 <font class="comment"> **********************************************************************/</font> 00068 00069 <font class="preprocessor">#include "<a class="code" href="cpl_conv_h.html">cpl_conv.h</a>"</font> 00070 <font class="preprocessor">#include "cpl_string.h"</font> 00071 00072 CPL_CVSID(<font class="stringliteral">"$Id: cpl_path_cpp-source.html,v 1.13 2002/12/21 19:13:12 warmerda Exp $"</font>); 00073 00074 00075 <font class="keyword">static</font> <font class="keywordtype">char</font> szStaticResult[2048]; <font class="comment">/* should be size of larged possible</font> 00076 <font class="comment"> filename */</font> 00077 00078 <font class="preprocessor">#ifdef WIN32 </font> 00079 <font class="preprocessor"></font><font class="preprocessor">#define SEP_CHAR '\\'</font> 00080 <font class="preprocessor"></font><font class="preprocessor">#define SEP_STRING "\\"</font> 00081 <font class="preprocessor"></font><font class="preprocessor">#else</font> 00082 <font class="preprocessor"></font><font class="preprocessor">#define SEP_CHAR '/'</font> 00083 <font class="preprocessor"></font><font class="preprocessor">#define SEP_STRING "/"</font> 00084 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00085 <font class="preprocessor"></font> 00086 <font class="comment">/************************************************************************/</font> 00087 <font class="comment">/* CPLFindFilenameStart() */</font> 00088 <font class="comment">/************************************************************************/</font> 00089 00090 <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> 00091 <font class="keyword"></font> 00092 <font class="keyword"></font>{ 00093 <font class="keywordtype">int</font> iFileStart; 00094 00095 <font class="keywordflow">for</font>( iFileStart = strlen(pszFilename); 00096 iFileStart > 0 00097 && pszFilename[iFileStart-1] != <font class="charliteral">'/'</font> 00098 && pszFilename[iFileStart-1] != <font class="charliteral">'\\'</font>; 00099 iFileStart-- ) {} 00100 00101 <font class="keywordflow">return</font> iFileStart; 00102 } 00103 00104 <font class="comment">/************************************************************************/</font> 00105 <font class="comment">/* CPLGetPath() */</font> 00106 <font class="comment">/************************************************************************/</font> 00107 00130 <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> 00131 <font class="keyword"></font> 00132 <font class="keyword"></font>{ 00133 <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart(pszFilename); 00134 00135 <font class="keywordflow">if</font>( iFileStart == 0 ) 00136 { 00137 strcpy( szStaticResult, <font class="stringliteral">""</font> ); 00138 <font class="keywordflow">return</font> szStaticResult; 00139 } 00140 00141 strncpy( szStaticResult, pszFilename, iFileStart ); 00142 szStaticResult[iFileStart] = <font class="charliteral">'\0'</font>; 00143 00144 <font class="keywordflow">if</font>( iFileStart > 1 00145 && (szStaticResult[iFileStart-1] == <font class="charliteral">'/'</font> 00146 || szStaticResult[iFileStart-1] == <font class="charliteral">'\\'</font>) ) 00147 szStaticResult[iFileStart-1] = <font class="charliteral">'\0'</font>; 00148 00149 <font class="keywordflow">return</font> szStaticResult; 00150 } 00151 00152 <font class="comment">/************************************************************************/</font> 00153 <font class="comment">/* CPLGetDirname() */</font> 00154 <font class="comment">/************************************************************************/</font> 00155 00178 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a11">CPLGetDirname</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFilename )<font class="keyword"></font> 00179 <font class="keyword"></font> 00180 <font class="keyword"></font>{ 00181 <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart(pszFilename); 00182 00183 <font class="keywordflow">if</font>( iFileStart == 0 ) 00184 { 00185 strcpy( szStaticResult, <font class="stringliteral">"."</font> ); 00186 <font class="keywordflow">return</font> szStaticResult; 00187 } 00188 00189 strncpy( szStaticResult, pszFilename, iFileStart ); 00190 szStaticResult[iFileStart] = <font class="charliteral">'\0'</font>; 00191 00192 <font class="keywordflow">if</font>( iFileStart > 1 00193 && (szStaticResult[iFileStart-1] == <font class="charliteral">'/'</font> 00194 || szStaticResult[iFileStart-1] == <font class="charliteral">'\\'</font>) ) 00195 szStaticResult[iFileStart-1] = <font class="charliteral">'\0'</font>; 00196 00197 <font class="keywordflow">return</font> szStaticResult; 00198 } 00199 00200 <font class="comment">/************************************************************************/</font> 00201 <font class="comment">/* CPLGetFilename() */</font> 00202 <font class="comment">/************************************************************************/</font> 00203 00224 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a12">CPLGetFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullFilename )<font class="keyword"></font> 00225 <font class="keyword"></font> 00226 <font class="keyword"></font>{ 00227 <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart( pszFullFilename ); 00228 00229 strcpy( szStaticResult, pszFullFilename + iFileStart ); 00230 00231 <font class="keywordflow">return</font> szStaticResult; 00232 } 00233 00234 <font class="comment">/************************************************************************/</font> 00235 <font class="comment">/* CPLGetBasename() */</font> 00236 <font class="comment">/************************************************************************/</font> 00237 00258 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a13">CPLGetBasename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullFilename )<font class="keyword"></font> 00259 <font class="keyword"></font> 00260 <font class="keyword"></font>{ 00261 <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart( pszFullFilename ); 00262 <font class="keywordtype">int</font> iExtStart, nLength; 00263 00264 <font class="keywordflow">for</font>( iExtStart = strlen(pszFullFilename); 00265 iExtStart > iFileStart && pszFullFilename[iExtStart] != <font class="charliteral">'.'</font>; 00266 iExtStart-- ) {} 00267 00268 <font class="keywordflow">if</font>( iExtStart == iFileStart ) 00269 iExtStart = strlen(pszFullFilename); 00270 00271 nLength = iExtStart - iFileStart; 00272 00273 strncpy( szStaticResult, pszFullFilename + iFileStart, nLength ); 00274 szStaticResult[nLength] = <font class="charliteral">'\0'</font>; 00275 00276 <font class="keywordflow">return</font> szStaticResult; 00277 } 00278 00279 00280 <font class="comment">/************************************************************************/</font> 00281 <font class="comment">/* CPLGetExtension() */</font> 00282 <font class="comment">/************************************************************************/</font> 00283 00303 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a14">CPLGetExtension</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullFilename )<font class="keyword"></font> 00304 <font class="keyword"></font> 00305 <font class="keyword"></font>{ 00306 <font class="keywordtype">int</font> iFileStart = CPLFindFilenameStart( pszFullFilename ); 00307 <font class="keywordtype">int</font> iExtStart; 00308 00309 <font class="keywordflow">for</font>( iExtStart = strlen(pszFullFilename); 00310 iExtStart > iFileStart && pszFullFilename[iExtStart] != <font class="charliteral">'.'</font>; 00311 iExtStart-- ) {} 00312 00313 <font class="keywordflow">if</font>( iExtStart == iFileStart ) 00314 iExtStart = strlen(pszFullFilename)-1; 00315 00316 strcpy( szStaticResult, pszFullFilename+iExtStart+1 ); 00317 00318 <font class="keywordflow">return</font> szStaticResult; 00319 } 00320 00321 <font class="comment">/************************************************************************/</font> 00322 <font class="comment">/* CPLResetExtension() */</font> 00323 <font class="comment">/************************************************************************/</font> 00324 00336 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a17">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> 00337 <font class="keyword"></font> 00338 <font class="keyword"></font>{ 00339 <font class="keywordtype">int</font> i; 00340 00341 <font class="comment">/* -------------------------------------------------------------------- */</font> 00342 <font class="comment">/* First, try and strip off any existing extension. */</font> 00343 <font class="comment">/* -------------------------------------------------------------------- */</font> 00344 strcpy( szStaticResult, pszPath ); 00345 <font class="keywordflow">for</font>( i = strlen(szStaticResult)-1; i > 0; i-- ) 00346 { 00347 <font class="keywordflow">if</font>( szStaticResult[i] == <font class="charliteral">'.'</font> ) 00348 { 00349 szStaticResult[i] = <font class="charliteral">'\0'</font>; 00350 <font class="keywordflow">break</font>; 00351 } 00352 00353 <font class="keywordflow">if</font>( szStaticResult[i] == <font class="charliteral">'/'</font> || szStaticResult[i] == <font class="charliteral">'\\'</font> 00354 || szStaticResult[i] == <font class="charliteral">':'</font> ) 00355 <font class="keywordflow">break</font>; 00356 } 00357 00358 <font class="comment">/* -------------------------------------------------------------------- */</font> 00359 <font class="comment">/* Append the new extension. */</font> 00360 <font class="comment">/* -------------------------------------------------------------------- */</font> 00361 strcat( szStaticResult, <font class="stringliteral">"."</font> ); 00362 strcat( szStaticResult, pszExt ); 00363 00364 <font class="keywordflow">return</font> szStaticResult; 00365 } 00366 00367 <font class="comment">/************************************************************************/</font> 00368 <font class="comment">/* CPLFormFilename() */</font> 00369 <font class="comment">/************************************************************************/</font> 00370 00399 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a15">CPLFormFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> * pszPath, 00400 <font class="keyword">const</font> <font class="keywordtype">char</font> * pszBasename, 00401 <font class="keyword">const</font> <font class="keywordtype">char</font> * pszExtension )<font class="keyword"></font> 00402 <font class="keyword"></font> 00403 <font class="keyword"></font>{ 00404 <font class="keyword">const</font> <font class="keywordtype">char</font> *pszAddedPathSep = <font class="stringliteral">""</font>; 00405 <font class="keyword">const</font> <font class="keywordtype">char</font> *pszAddedExtSep = <font class="stringliteral">""</font>; 00406 00407 <font class="keywordflow">if</font>( pszPath == NULL ) 00408 pszPath = <font class="stringliteral">""</font>; 00409 <font class="keywordflow">else</font> <font class="keywordflow">if</font>( strlen(pszPath) > 0 00410 && pszPath[strlen(pszPath)-1] != <font class="charliteral">'/'</font> 00411 && pszPath[strlen(pszPath)-1] != <font class="charliteral">'\\'</font> ) 00412 pszAddedPathSep = SEP_STRING; 00413 00414 <font class="keywordflow">if</font>( pszExtension == NULL ) 00415 pszExtension = <font class="stringliteral">""</font>; 00416 <font class="keywordflow">else</font> <font class="keywordflow">if</font>( pszExtension[0] != <font class="charliteral">'.'</font> && strlen(pszExtension) > 0 ) 00417 pszAddedExtSep = <font class="stringliteral">"."</font>; 00418 00419 sprintf( szStaticResult, <font class="stringliteral">"%s%s%s%s%s"</font>, 00420 pszPath, pszAddedPathSep, 00421 pszBasename, 00422 pszAddedExtSep, pszExtension ); 00423 00424 <font class="keywordflow">return</font> szStaticResult; 00425 } 00426 00427 <font class="comment">/************************************************************************/</font> 00428 <font class="comment">/* CPLFormCIFilename() */</font> 00429 <font class="comment">/************************************************************************/</font> 00430 00455 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a16">CPLFormCIFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> * pszPath, 00456 <font class="keyword">const</font> <font class="keywordtype">char</font> * pszBasename, 00457 <font class="keyword">const</font> <font class="keywordtype">char</font> * pszExtension )<font class="keyword"></font> 00458 <font class="keyword"></font> 00459 <font class="keyword"></font>{ 00460 <font class="preprocessor">#ifdef WIN32</font> 00461 <font class="preprocessor"></font> <font class="keywordflow">return</font> <a class="code" href="cpl_conv_h.html#a15">CPLFormFilename</a>( pszPath, pszBasename, pszExtension ); 00462 <font class="preprocessor">#else</font> 00463 <font class="preprocessor"></font> <font class="keyword">const</font> <font class="keywordtype">char</font> *pszAddedExtSep = <font class="stringliteral">""</font>; 00464 <font class="keywordtype">char</font> *pszFilename; 00465 <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFullPath; 00466 <font class="keywordtype">int</font> nLen = strlen(pszBasename)+2, i; 00467 FILE *fp; 00468 00469 <font class="keywordflow">if</font>( pszExtension != NULL ) 00470 nLen += strlen(pszExtension); 00471 00472 pszFilename = (<font class="keywordtype">char</font> *) <a class="code" href="cpl_conv_h.html#a3">CPLMalloc</a>(nLen); 00473 00474 <font class="keywordflow">if</font>( pszExtension == NULL ) 00475 pszExtension = <font class="stringliteral">""</font>; 00476 <font class="keywordflow">else</font> <font class="keywordflow">if</font>( pszExtension[0] != <font class="charliteral">'.'</font> && strlen(pszExtension) > 0 ) 00477 pszAddedExtSep = <font class="stringliteral">"."</font>; 00478 00479 sprintf( pszFilename, <font class="stringliteral">"%s%s%s"</font>, 00480 pszBasename, pszAddedExtSep, pszExtension ); 00481 00482 pszFullPath = <a class="code" href="cpl_conv_h.html#a15">CPLFormFilename</a>( pszPath, pszFilename, NULL ); 00483 fp = VSIFOpen( pszFullPath, <font class="stringliteral">"r"</font> ); 00484 <font class="keywordflow">if</font>( fp == NULL ) 00485 { 00486 <font class="keywordflow">for</font>( i = 0; pszFilename[i] != <font class="charliteral">'\0'</font>; i++ ) 00487 { 00488 <font class="keywordflow">if</font>( pszFilename[i] >= <font class="charliteral">'a'</font> && pszFilename[i] <= <font class="charliteral">'z'</font> ) 00489 pszFilename[i] = pszFilename[i] + <font class="charliteral">'A'</font> - <font class="charliteral">'a'</font>; 00490 } 00491 00492 pszFullPath = <a class="code" href="cpl_conv_h.html#a15">CPLFormFilename</a>( pszPath, pszFilename, NULL ); 00493 fp = VSIFOpen( pszFullPath, <font class="stringliteral">"r"</font> ); 00494 } 00495 00496 <font class="keywordflow">if</font>( fp == NULL ) 00497 { 00498 <font class="keywordflow">for</font>( i = 0; pszFilename[i] != <font class="charliteral">'\0'</font>; i++ ) 00499 { 00500 <font class="keywordflow">if</font>( pszFilename[i] >= <font class="charliteral">'A'</font> && pszFilename[i] <= <font class="charliteral">'Z'</font> ) 00501 pszFilename[i] = pszFilename[i] + <font class="charliteral">'a'</font> - <font class="charliteral">'A'</font>; 00502 } 00503 00504 pszFullPath = <a class="code" href="cpl_conv_h.html#a15">CPLFormFilename</a>( pszPath, pszFilename, NULL ); 00505 fp = VSIFOpen( pszFullPath, <font class="stringliteral">"r"</font> ); 00506 } 00507 00508 <font class="keywordflow">if</font>( fp != NULL ) 00509 VSIFClose( fp ); 00510 <font class="keywordflow">else</font> 00511 pszFullPath = <a class="code" href="cpl_conv_h.html#a15">CPLFormFilename</a>( pszPath, pszBasename, pszExtension ); 00512 00513 CPLFree( pszFilename ); 00514 00515 <font class="keywordflow">return</font> pszFullPath; 00516 <font class="preprocessor">#endif</font> 00517 <font class="preprocessor"></font>} 00518 00519 <font class="comment">/************************************************************************/</font> 00520 <font class="comment">/* CPLProjectRelativeFilename() */</font> 00521 <font class="comment">/************************************************************************/</font> 00522 00550 <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="cpl_conv_h.html#a18">CPLProjectRelativeFilename</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszProjectDir, 00551 <font class="keyword">const</font> <font class="keywordtype">char</font> *pszSecondaryFilename )<font class="keyword"></font> 00552 <font class="keyword"></font> 00553 <font class="keyword"></font>{ 00554 <font class="keywordflow">if</font>( !<a class="code" href="cpl_conv_h.html#a19">CPLIsFilenameRelative</a>( pszSecondaryFilename ) ) 00555 <font class="keywordflow">return</font> pszSecondaryFilename; 00556 00557 <font class="keywordflow">if</font>( pszProjectDir == NULL || strlen(pszProjectDir) == 0 ) 00558 <font class="keywordflow">return</font> pszSecondaryFilename; 00559 00560 strcpy( szStaticResult, pszProjectDir ); 00561 <font class="keywordflow">if</font>( pszProjectDir[strlen(pszProjectDir)-1] != <font class="charliteral">'/'</font> 00562 && pszProjectDir[strlen(pszProjectDir)-1] != <font class="charliteral">'\\'</font> ) 00563 strcat( szStaticResult, SEP_STRING ); 00564 00565 strcat( szStaticResult, pszSecondaryFilename ); 00566 00567 <font class="keywordflow">return</font> szStaticResult; 00568 } 00569 00570 <font class="comment">/************************************************************************/</font> 00571 <font class="comment">/* CPLIsFilenameRelative() */</font> 00572 <font class="comment">/************************************************************************/</font> 00573 00586 <font class="keywordtype">int</font> <a class="code" href="cpl_conv_h.html#a19">CPLIsFilenameRelative</a>( <font class="keyword">const</font> <font class="keywordtype">char</font> *pszFilename )<font class="keyword"></font> 00587 <font class="keyword"></font> 00588 <font class="keyword"></font>{ 00589 <font class="keywordflow">if</font>( (strlen(pszFilename) > 2 && strncmp(pszFilename+1,<font class="stringliteral">":\\"</font>,2) == 0) 00590 || pszFilename[0] == <font class="charliteral">'\\'</font> 00591 || pszFilename[0] == <font class="charliteral">'/'</font> ) 00592 <font class="keywordflow">return</font> FALSE; 00593 <font class="keywordflow">else</font> 00594 <font class="keywordflow">return</font> TRUE; 00595 } </div></pre><hr><address><small>Generated at Sat Dec 21 14:01:57 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>, © 1997-2000</small></address> </body> </html>