1.\" Copyright (c) 1994 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" This code is derived from software contributed to Berkeley by 5.\" Jan-Simon Pendry. 6.\" 7.\" Redistribution and use in source and binary forms, with or without 8.\" modification, are permitted provided that the following conditions 9.\" are met: 10.\" 1. Redistributions of source code must retain the above copyright 11.\" notice, this list of conditions and the following disclaimer. 12.\" 2. Redistributions in binary form must reproduce the above copyright 13.\" notice, this list of conditions and the following disclaimer in the 14.\" documentation and/or other materials provided with the distribution. 15.\" 3. Neither the name of the University nor the names of its contributors 16.\" may be used to endorse or promote products derived from this software 17.\" without specific prior written permission. 18.\" 19.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29.\" SUCH DAMAGE. 30.\" 31.\" $OpenBSD: realpath.3,v 1.26 2021/10/13 15:04:53 kn Exp $ 32.\" 33.Dd $Mdocdate: October 13 2021 $ 34.Dt REALPATH 3 35.Os 36.Sh NAME 37.Nm realpath 38.Nd returns the canonicalized absolute pathname 39.Sh SYNOPSIS 40.In limits.h 41.In stdlib.h 42.Ft "char *" 43.Fn realpath "const char *pathname" "char *resolved" 44.Sh DESCRIPTION 45The 46.Fn realpath 47function resolves all symbolic links, extra 48.Dq / 49characters and references to 50.Pa /./ 51and 52.Pa /../ 53in 54.Fa pathname , 55and copies the resulting absolute pathname into the memory referenced by 56.Fa resolved . 57The 58.Fa resolved 59argument 60.Em must 61refer to a buffer capable of storing at least 62.Dv PATH_MAX 63characters, or be 64.Dv NULL . 65.Pp 66The 67.Fn realpath 68function will resolve both absolute and relative paths 69and return the absolute pathname corresponding to 70.Fa pathname . 71All components of 72.Fa pathname 73must exist when 74.Fn realpath 75is called. 76.Sh RETURN VALUES 77The 78.Fn realpath 79function returns 80.Fa resolved 81on success. 82If 83.Fa resolved 84is 85.Dv NULL 86and no error occurred, then 87.Fn realpath 88returns a NUL-terminated string in a newly allocated buffer. 89If an error occurs, 90.Fn realpath 91returns 92.Dv NULL 93and the contents of 94.Fa resolved 95are undefined. 96.Sh ERRORS 97The function 98.Fn realpath 99will fail if: 100.Bl -tag -width Er 101.It Bq Er EACCES 102Read or search permission was denied for a component of 103.Ar pathname . 104.It Bq Er EINVAL 105The 106.Ar pathname 107argument is a null pointer. 108.It Bq Er EIO 109An error occurred while reading from the file system. 110.It Bq Er ELOOP 111Too many symbolic links were encountered in translating 112.Ar pathname . 113.It Bq Er ENAMETOOLONG 114A component of 115.Ar pathname 116exceeded 117.Dv NAME_MAX 118characters, or the entire 119.Ar pathname 120(including the terminating NUL) exceeded 121.Dv PATH_MAX . 122.It Bq Er ENAMETOOLONG 123Pathname resolution of a symbolic link produced an intermediate 124result whose length exceeds 125.Dv PATH_MAX . 126.It Bq Er ENOENT 127A component of 128.Ar pathname 129does not name an existing file or 130.Ar pathname 131points to an empty string. 132.It Bq Er ENOTDIR 133A component of the path prefix is not a directory. 134.It Bq Er ENOMEM 135Sufficient storage space is unavailable for allocation. 136.El 137.Sh SEE ALSO 138.Xr readlink 1 , 139.Xr realpath 1 , 140.Xr getcwd 3 141.Sh STANDARDS 142The 143.Fn realpath 144function conforms to 145.St -p1003.1-2008 . 146.Sh HISTORY 147The 148.Fn realpath 149function call first appeared in 150.Bx 4.4 . 151.Pp 152In 153.Ox 6.6 , 154it was reimplemented on top of the 155.Fn __realpath 156system call. 157Its calling convention differs from the standard 158function by requiring 159.Ar resolved 160to not be 161.Dv NULL 162and by returning an integer, 163zero on success, and -1 with corresponding errno on failure. 164This is visible in the output of 165.Xr kdump 1 . 166