3 <title>/var/www/vhosts/netmite.com/
android/mydroid/bionic/libc/bionic/realpath.c</title>
5<body bgcolor=
"#ffffff" text=
"#000000">
43<font color=
"0000ff"><strong>#
if defined(LIBC_SCCS) && !defined(lint)</strong></font>
44<strong>
static</strong> <strong>
char</strong> <font color=
"#2040a0">sccsid</font><font color=
"4444FF">[</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font> <font color=
"#008000">"@(#)realpath.c 8.1 (Berkeley) 2/16/94"</font><font color=
"4444FF">;</font>
45<strong>
static</strong> <strong>
char</strong> <font color=
"#2040a0">rcsid</font><font color=
"4444FF">[</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font>
46<font color=
"#008000">"$FreeBSD: /repoman/r/ncvs/src/lib/libc/stdlib/realpath.c,v 1.6.2.1 2003/08/03 23:47:39 nectar Exp $"</font><font color=
"4444FF">;</font>
47<font color=
"0000ff"><strong>#endif<font color=
"#444444"> </font></strong></font>
49<font color=
"0000ff"><strong>#include <font color=
"#008000"><sys/param.h></font></strong></font>
50<font color=
"0000ff"><strong>#include <font color=
"#008000"><sys/stat.h></font></strong></font>
52<font color=
"0000ff"><strong>#include <font color=
"#008000"><errno.h></font></strong></font>
53<font color=
"0000ff"><strong>#include <font color=
"#008000"><fcntl.h></font></strong></font>
54<font color=
"0000ff"><strong>#include <font color=
"#008000"><stdlib.h></font></strong></font>
55<font color=
"0000ff"><strong>#include <font color=
"#008000"><
string.h></font></strong></font>
56<font color=
"0000ff"><strong>#include <font color=
"#008000"><unistd.h></font></strong></font>
65<strong>
char</strong> <font color=
"4444FF">*</font>
66<font color=
"#2040a0">realpath</font><font color=
"4444FF">(</font><font color=
"#2040a0">path</font>, <font color=
"#2040a0">resolved</font><font color=
"4444FF">)</font>
67 <strong>const</strong> <strong>char</strong> <font color="4444FF">*</font><font color=
"#2040a0">path</font><font color="4444FF">;</font>
68 <strong>
char</strong> <font color=
"4444FF">*</font><font color=
"#2040a0">resolved</font><font color=
"4444FF">;</font>
69<font color=
"4444FF"><strong>{</strong></font>
70 <strong>
struct</strong> <font color=
"#2040a0">stat</font> <font color=
"#2040a0">sb</font><font color=
"4444FF">;</font>
71 <strong>
int</strong> <font color=
"#2040a0">fd</font>, <font color=
"#2040a0">n</font>, <font color=
"#2040a0">rootd</font>, <font color=
"#2040a0">serrno</font><font color=
"4444FF">;</font>
72 <strong>
char</strong> <font color=
"4444FF">*</font><font color=
"#2040a0">p</font>, <font color=
"4444FF">*</font><font color=
"#2040a0">q</font>, <font color=
"#2040a0">wbuf</font><font color=
"4444FF">[</font><font color=
"#2040a0">PATH_MAX</font><font color=
"4444FF">]</font><font color=
"4444FF">;</font>
73 <strong>
int</strong> <font color=
"#2040a0">symlinks</font> <font color=
"4444FF">=</font> <font color=
"#FF0000">0</font><font color=
"4444FF">;</font>
75 <font color=
"#444444"></font>
76 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"4444FF">(</font><font color=
"#2040a0">fd</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">open</font><font color=
"4444FF">(</font><font color=
"#008000">"."</font>, <font color=
"#2040a0">O_RDONLY</font><font color=
"4444FF">)</font><font color=
"4444FF">)</font> <font color=
"4444FF"><</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
77 <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">strcpy</font><font color="4444FF">(</font><font color=
"#2040a0">resolved</font>, <font color=
"#008000">"."</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
78 <strong>
return</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">NULL</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
79 <font color=
"4444FF"><strong>}</strong></font>
81 <font color=
"#444444">
89 <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">strncpy</font><font color="4444FF">(</font><font color=
"#2040a0">resolved</font>, <font color=
"#2040a0">path</font>, <font color=
"#2040a0">PATH_MAX</font> <font color="4444FF">-</font> <font color=
"#FF0000">1</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
90 <font color=
"#2040a0">resolved</font><font color=
"4444FF">[</font><font color=
"#2040a0">PATH_MAX</font> <font color=
"4444FF">-</font> <font color=
"#FF0000">1</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font> <font color=
"#008000">
'<font color="#77dd77">\0</font>'</font><font color=
"4444FF">;</font>
91<font color=
"#2040a0">loop</font><font color=
"4444FF">:</font>
92 <font color=
"#2040a0">q</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">strrchr</font><font color=
"4444FF">(</font><font color=
"#2040a0">resolved</font>, <font color=
"#008000">
'/'</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
93 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">q</font> <font color=
"4444FF">!</font><font color=
"4444FF">=</font> <font color=
"#2040a0">NULL</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
94 <font color=
"#2040a0">p</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">q</font> <font color=
"4444FF">+</font> <font color=
"#FF0000">1</font><font color=
"4444FF">;</font>
95 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">q</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#2040a0">resolved</font><font color=
"4444FF">)</font>
96 <font color=
"#2040a0">q</font> <font color="4444FF">=</font> <font color=
"#008000">"/"</font><font color=
"4444FF">;</font>
97 <strong>
else</strong> <font color=
"4444FF"><strong>{</strong></font>
98 <strong>
do</strong> <font color=
"4444FF"><strong>{</strong></font>
99 <font color=
"4444FF">-</font><font color=
"4444FF">-</font><font color=
"#2040a0">q</font><font color=
"4444FF">;</font>
100 <font color=
"4444FF"><strong>}</strong></font> <strong>
while</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">q</font> <font color=
"4444FF">></font> <font color=
"#2040a0">resolved</font> <font color=
"4444FF">&</font><font color=
"4444FF">&</font> <font color=
"4444FF">*</font><font color=
"#2040a0">q</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#008000">
'/'</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
101 <font color=
"#2040a0">q</font><font color=
"4444FF">[</font><font color=
"#FF0000">1</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font> <font color=
"#008000">
'<font color="#77dd77">\0</font>'</font><font color=
"4444FF">;</font>
102 <font color=
"#2040a0">q</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">resolved</font><font color=
"4444FF">;</font>
103 <font color=
"4444FF"><strong>}</strong></font>
104 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">chdir</font><font color=
"4444FF">(</font><font color=
"#2040a0">q</font><font color=
"4444FF">)</font> <font color=
"4444FF"><</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font>
105 <strong>goto</strong> <font color="#2040a0">err1</font><font color="4444FF">;</font>
106 <font color=
"4444FF"><strong>}</strong></font> <strong>
else</strong>
107 <font color=
"#2040a0">p</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">resolved</font><font color=
"4444FF">;</font>
109 <font color=
"#444444"></font>
110 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"4444FF">*</font><font color=
"#2040a0">p</font> <font color=
"4444FF">!</font><font color=
"4444FF">=</font> <font color=
"#008000">
'<font color="#77dd77">\0</font>'</font> <font color=
"4444FF">&</font><font color=
"4444FF">&</font> <font color=
"#2040a0">lstat</font><font color=
"4444FF">(</font><font color=
"#2040a0">p</font>, <font color=
"4444FF">&</font><font color=
"#2040a0">sb</font><font color=
"4444FF">)</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
111 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">S_ISLNK</font><font color=
"4444FF">(</font><font color=
"#2040a0">sb</font>.<font color=
"#2040a0">st_mode</font><font color=
"4444FF">)</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
112 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"4444FF">+</font><font color=
"4444FF">+</font><font color=
"#2040a0">symlinks</font> <font color=
"4444FF">></font> <font color=
"#2040a0">MAXSYMLINKS</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
113 <font color=
"#2040a0">errno</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">ELOOP</font><font color=
"4444FF">;</font>
114 <strong>
goto</strong> <font color=
"#2040a0">err1</font><font color=
"4444FF">;</font>
115 <font color=
"4444FF"><strong>}</strong></font>
116 <font color=
"#2040a0">n</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">readlink</font><font color=
"4444FF">(</font><font color=
"#2040a0">p</font>, <font color=
"#2040a0">resolved</font>, <font color=
"#2040a0">PATH_MAX</font> <font color=
"4444FF">-</font> <font color=
"#FF0000">1</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
117 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">n</font> <font color=
"4444FF"><</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font>
118 <strong>goto</strong> <font color="#2040a0">err1</font><font color="4444FF">;</font>
119 <font color=
"#2040a0">resolved</font><font color=
"4444FF">[</font><font color=
"#2040a0">n</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font> <font color=
"#008000">
'<font color="#77dd77">\0</font>'</font><font color=
"4444FF">;</font>
120 <strong>
goto</strong> <font color=
"#2040a0">loop</font><font color=
"4444FF">;</font>
121 <font color=
"4444FF"><strong>}</strong></font>
122 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">S_ISDIR</font><font color=
"4444FF">(</font><font color=
"#2040a0">sb</font>.<font color=
"#2040a0">st_mode</font><font color=
"4444FF">)</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
123 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">chdir</font><font color=
"4444FF">(</font><font color=
"#2040a0">p</font><font color=
"4444FF">)</font> <font color=
"4444FF"><</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font>
124 <strong>goto</strong> <font color="#2040a0">err1</font><font color="4444FF">;</font>
125 <font color=
"#2040a0">p</font> <font color=
"4444FF">=</font> <font color=
"#008000">""</font><font color=
"4444FF">;</font>
126 <font color=
"4444FF"><strong>}</strong></font>
127 <font color=
"4444FF"><strong>}</strong></font>
129 <font color=
"#444444">
133 <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">strcpy</font><font color="4444FF">(</font><font color=
"#2040a0">wbuf</font>, <font color=
"#2040a0">p</font><font color="4444FF">)</font><font color=
"4444FF">;</font>
134 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">getcwd</font><font color=
"4444FF">(</font><font color=
"#2040a0">resolved</font>, <font color=
"#2040a0">PATH_MAX</font><font color=
"4444FF">)</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font>
135 <strong>
goto</strong> <font color=
"#2040a0">err1</font><font color=
"4444FF">;</font>
137 <font color=
"#444444">
141 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">resolved</font><font color=
"4444FF">[</font><font color=
"#FF0000">0</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#008000">
'/'</font> <font color=
"4444FF">&</font><font color=
"4444FF">&</font> <font color=
"#2040a0">resolved</font><font color=
"4444FF">[</font><font color=
"#FF0000">1</font><font color=
"4444FF">]</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#008000">
'<font color="#77dd77">\0</font>'</font><font color=
"4444FF">)</font>
142 <font color=
"#2040a0">rootd</font> <font color="4444FF">=</font> <font color=
"#FF0000">1</font><font color=
"4444FF">;</font>
143 <strong>
else</strong>
144 <font color=
"#2040a0">rootd</font> <font color=
"4444FF">=</font> <font color=
"#FF0000">0</font><font color=
"4444FF">;</font>
146 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"4444FF">*</font><font color=
"#2040a0">wbuf</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
147 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">strlen</font><font color=
"4444FF">(</font><font color=
"#2040a0">resolved</font><font color=
"4444FF">)</font> <font color=
"4444FF">+</font> <font color=
"#2040a0">strlen</font><font color="4444FF">(</font><font color=
"#2040a0">wbuf</font><font color="4444FF">)</font> <font color=
"4444FF">+</font> <font color=
"4444FF">(</font><font color=
"#FF0000">1</font><font color=
"4444FF">-</font><font color=
"#2040a0">rootd</font><font color=
"4444FF">)</font> <font color=
"4444FF">+</font> <font color=
"#FF0000">1</font> <font color=
"4444FF">></font>
148 <font color=
"#2040a0">PATH_MAX</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
149 <font color=
"#2040a0">errno</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">ENAMETOOLONG</font><font color=
"4444FF">;</font>
150 <strong>
goto</strong> <font color=
"#2040a0">err1</font><font color=
"4444FF">;</font>
151 <font color=
"4444FF"><strong>}</strong></font>
152 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">rootd</font> <font color=
"4444FF">=</font><font color=
"4444FF">=</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font>
153 <font color=
"4444FF">(</font><strong>void</strong><font color="4444FF">)</font><font color=
"#2040a0">strcat</font><font color=
"4444FF">(</font><font color=
"#2040a0">resolved</font>, <font color=
"#008000">"/"</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
154 <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">strcat</font><font color="4444FF">(</font><font color=
"#2040a0">resolved</font>, <font color=
"#2040a0">wbuf</font><font color="4444FF">)</font><font color=
"4444FF">;</font>
155 <font color=
"4444FF"><strong>}</strong></font>
157 <font color=
"#444444"></font>
158 <strong>
if</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">fchdir</font><font color=
"4444FF">(</font><font color=
"#2040a0">fd</font><font color=
"4444FF">)</font> <font color=
"4444FF"><</font> <font color=
"#FF0000">0</font><font color=
"4444FF">)</font> <font color=
"4444FF"><strong>{</strong></font>
159 <font color=
"#2040a0">serrno</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">errno</font><font color=
"4444FF">;</font>
160 <strong>
goto</strong> <font color=
"#2040a0">err2</font><font color=
"4444FF">;</font>
161 <font color=
"4444FF"><strong>}</strong></font>
163 <font color=
"#444444"></font>
164 <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">close</font><font color="4444FF">(</font><font color=
"#2040a0">fd</font><font color="4444FF">)</font><font color=
"4444FF">;</font>
165 <strong>
return</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">resolved</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
167<font color=
"#2040a0">err1</font><font color=
"4444FF">:</font> <font color=
"#2040a0">serrno</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">errno</font><font color=
"4444FF">;</font>
168 <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">fchdir</font><font color="4444FF">(</font><font color=
"#2040a0">fd</font><font color="4444FF">)</font><font color=
"4444FF">;</font>
169<font color=
"#2040a0">err2</font><font color=
"4444FF">:</font> <font color=
"4444FF">(</font><strong>
void</strong><font color=
"4444FF">)</font><font color=
"#2040a0">close</font><font color="4444FF">(</font><font color=
"#2040a0">fd</font><font color="4444FF">)</font><font color=
"4444FF">;</font>
170 <font color=
"#2040a0">errno</font> <font color=
"4444FF">=</font> <font color=
"#2040a0">serrno</font><font color=
"4444FF">;</font>
171 <strong>
return</strong> <font color=
"4444FF">(</font><font color=
"#2040a0">NULL</font><font color=
"4444FF">)</font><font color=
"4444FF">;</font>
172<font color=
"4444FF"><strong>}</strong></font>
176syntax highlighted by <a href=
"http://www.palfrader.org/code2html">Code2HTML</a>, v. 0.9.1
@ android
read-only boolean, a machine running an Google's Android version of the Linux Operating System