<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>popt/findme.c Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.2.17 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>popt/findme.c</h1><a href="findme_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 00005 <span class="comment">/* (C) 1998-2000 Red Hat, Inc. -- Licensing details are in the COPYING</span> 00006 <span class="comment"> file accompanying popt source distributions, available from </span> 00007 <span class="comment"> ftp://ftp.rpm.org/pub/rpm/dist. */</span> 00008 00009 <span class="preprocessor">#include "<a class="code" href="system_8h.html">system.h</a>"</span> 00010 <span class="preprocessor">#include "<a class="code" href="findme_8h.html">findme.h</a>"</span> 00011 <a name="l00012"></a><a class="code" href="findme_8c.html#a0">00012</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="findme_8c.html#a0">findProgramPath</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * argv0) { 00013 <span class="keywordtype">char</span> * path = <a class="code" href="system_8h.html#a34">getenv</a>(<span class="stringliteral">"PATH"</span>); 00014 <span class="keywordtype">char</span> * pathbuf; 00015 <span class="keywordtype">char</span> * start, * chptr; 00016 <span class="keywordtype">char</span> * buf; 00017 00018 <span class="keywordflow">if</span> (argv0 == NULL) <span class="keywordflow">return</span> NULL; <span class="comment">/* XXX can't happen */</span> 00019 <span class="comment">/* If there is a / in the argv[0], it has to be an absolute path */</span> 00020 <span class="keywordflow">if</span> (strchr(argv0, <span class="charliteral">'/'</span>)) 00021 <span class="keywordflow">return</span> <a class="code" href="rpmmalloc_8c.html#a4">xstrdup</a>(argv0); 00022 00023 <span class="keywordflow">if</span> (path == NULL) <span class="keywordflow">return</span> NULL; 00024 00025 start = pathbuf = <a class="code" href="system_8h.html#a36">alloca</a>(strlen(path) + 1); 00026 buf = malloc(strlen(path) + strlen(argv0) + <span class="keyword">sizeof</span>(<span class="stringliteral">"/"</span>)); 00027 <span class="keywordflow">if</span> (buf == NULL) <span class="keywordflow">return</span> NULL; <span class="comment">/* XXX can't happen */</span> 00028 strcpy(pathbuf, path); 00029 00030 chptr = NULL; 00031 <span class="comment">/*@-branchstate@*/</span> 00032 <span class="keywordflow">do</span> { 00033 <span class="keywordflow">if</span> ((chptr = strchr(start, <span class="charliteral">':'</span>))) 00034 *chptr = <span class="charliteral">'\0'</span>; 00035 sprintf(buf, <span class="stringliteral">"%s/%s"</span>, start, argv0); 00036 00037 <span class="keywordflow">if</span> (!access(buf, <a class="code" href="system_8h.html#a8">X_OK</a>)) 00038 <span class="keywordflow">return</span> buf; 00039 00040 <span class="keywordflow">if</span> (chptr) 00041 start = chptr + 1; 00042 <span class="keywordflow">else</span> 00043 start = NULL; 00044 } <span class="keywordflow">while</span> (start && *start); 00045 <span class="comment">/*@=branchstate@*/</span> 00046 00047 free(buf); 00048 00049 <span class="keywordflow">return</span> NULL; 00050 } </pre></div><hr><address style="align: right;"><small>Generated on Thu Sep 12 22:14:59 2002 for rpm by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.17 </small></address> </body> </html>