xref: /freebsd/lib/libc/gen/getcwd.3 (revision 3494f7c0)
1.\" Copyright (c) 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.Dd April 17, 2010
29.Dt GETCWD 3
30.Os
31.Sh NAME
32.Nm getcwd ,
33.Nm getwd
34.Nd get working directory pathname
35.Sh LIBRARY
36.Lb libc
37.Sh SYNOPSIS
38.In unistd.h
39.Ft char *
40.Fn getcwd "char *buf" "size_t size"
41.Ft char *
42.Fn getwd "char *buf"
43.Sh DESCRIPTION
44The
45.Fn getcwd
46function copies the absolute pathname of the current working directory
47into the memory referenced by
48.Fa buf
49and returns a pointer to
50.Fa buf .
51The
52.Fa size
53argument is the size, in bytes, of the array referenced by
54.Fa buf .
55.Pp
56If
57.Fa buf
58is
59.Dv NULL ,
60space is allocated as necessary to store the pathname.
61This space may later be
62.Xr free 3 Ns 'd .
63.Pp
64The function
65.Fn getwd
66is a compatibility routine which calls
67.Fn getcwd
68with its
69.Fa buf
70argument and a size of
71.Dv MAXPATHLEN
72(as defined in the include
73file
74.In sys/param.h ) .
75Obviously,
76.Fa buf
77should be at least
78.Dv MAXPATHLEN
79bytes in length.
80.Pp
81These routines have traditionally been used by programs to save the
82name of a working directory for the purpose of returning to it.
83A much faster and less error-prone method of accomplishing this is to
84open the current directory
85.Pq Ql .\&
86and use the
87.Xr fchdir 2
88function to return.
89.Sh RETURN VALUES
90Upon successful completion, a pointer to the pathname is returned.
91Otherwise a
92.Dv NULL
93pointer is returned and the global variable
94.Va errno
95is set to indicate the error.
96In addition,
97.Fn getwd
98copies the error message associated with
99.Va errno
100into the memory referenced by
101.Fa buf .
102.Sh ERRORS
103The
104.Fn getcwd
105function
106will fail if:
107.Bl -tag -width Er
108.It Bq Er EINVAL
109The
110.Fa size
111argument is zero.
112.It Bq Er ENOENT
113A component of the pathname no longer exists.
114.It Bq Er ENOMEM
115Insufficient memory is available.
116.It Bq Er ERANGE
117The
118.Fa size
119argument is greater than zero but smaller than the length of the pathname
120plus 1.
121.El
122.Pp
123The
124.Fn getcwd
125function
126may fail if:
127.Bl -tag -width Er
128.It Bq Er EACCES
129Read or search permission was denied for a component of the pathname.
130This is only checked in limited cases, depending on implementation details.
131.El
132.Sh SEE ALSO
133.Xr chdir 2 ,
134.Xr fchdir 2 ,
135.Xr malloc 3 ,
136.Xr strerror 3
137.Sh STANDARDS
138The
139.Fn getcwd
140function
141conforms to
142.St -p1003.1-90 .
143The ability to specify a
144.Dv NULL
145pointer and have
146.Fn getcwd
147allocate memory as necessary is an extension.
148.Sh HISTORY
149The
150.Fn getwd
151function appeared in
152.Bx 4.0 .
153.Sh BUGS
154The
155.Fn getwd
156function
157does not do sufficient error checking and is not able to return very
158long, but valid, paths.
159It is provided for compatibility.
160