summaryrefslogtreecommitdiff
path: root/usr/src/man/man3c/getcwd.3c
diff options
context:
space:
mode:
authorDan McDonald <danmcd@joyent.com>2021-03-19 11:38:16 -0400
committerDan McDonald <danmcd@joyent.com>2021-03-19 11:38:16 -0400
commita1ce764f98e19204e95ee78d66746478d10ea59c (patch)
treeb210134e2dd21bde06dae97ddebffce293b3d39d /usr/src/man/man3c/getcwd.3c
parent1d684b54ff06842338ae5e57f8873ec9b9d24df3 (diff)
parentfc1e9305ae86a296023d90240041e860548ba1bd (diff)
downloadillumos-joyent-a1ce764f98e19204e95ee78d66746478d10ea59c.tar.gz
[illumos-gate merge]
commit fc1e9305ae86a296023d90240041e860548ba1bd 13627 chown(2) mixes up chown() and fchown() commit 173f6047c6877d03cbb55428e6ec95f07c9cbb83 13622 Memory leak in coretemp_create_sensor commit 1b1c4b089b04ffa47f04c2923dc78c7fcafcf964 13575 loader: use display pixel density for font autoselection commit 5fbc1fe0da7f34cf8155bf7624c94583cc98e47c 13526 cmd/availdevs always rebuilds commit b2761fb273089c452ca34297d7ab4a1d1c1f1012 13599 ahci(7d) requires alias for HP AHCI SATA controller commit 6edc7986d8c0034d072afac8b25477b983bf8f55 13586 getcwd() should accept a 0 length argument (fix mandoc) commit d6f391ef39bc41c64e16ac5d7b10c1c8d5b1761e 4149 ksh head builtin does not like newlines commit aa15372140b6b509a26742fd85fe78dd77d9a642 13586 getcwd() should accept a 0 length argument commit f38f28fdbc29b3c5020295a6c6cb1ac52e949978 13574 loader.efi: efifb_gop_get_edid() is broken commit 8781de92560745751daa24953330574a84de46e6 13632 smntemp doesn't need smntemp alias commit 7eb8c88abb70697edf48045434d2c18bb82ad2e7 9620 getcwd() syscall has unbounded memory allocation commit f9bbf53b825c087ef99dd9b3e51570ec68a51463 12558 Builtin command "printf" of ksh93 does not behave as specified commit 4162633a7c5961f388fdc51bcecb3016104b359f 3782 ksh93's builtin chown fails with numeric ids
Diffstat (limited to 'usr/src/man/man3c/getcwd.3c')
-rw-r--r--usr/src/man/man3c/getcwd.3c311
1 files changed, 155 insertions, 156 deletions
diff --git a/usr/src/man/man3c/getcwd.3c b/usr/src/man/man3c/getcwd.3c
index f1114bc6dd..ba27b7f9bb 100644
--- a/usr/src/man/man3c/getcwd.3c
+++ b/usr/src/man/man3c/getcwd.3c
@@ -43,110 +43,98 @@
.\" Copyright 1989 AT&T
.\" Copyright (c) 2001, The IEEE and The Open Group. All Rights Reserved.
.\" Portions Copyright (c) 2004, Sun Microsystems, Inc. All Rights Reserved.
+.\" Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
.\"
-.TH GETCWD 3C "Oct 18, 2004"
-.SH NAME
-getcwd \- get pathname of current working directory
-.SH SYNOPSIS
-.LP
-.nf
-#include <unistd.h>
-
-\fBchar *\fR\fBgetcwd\fR(\fBchar *\fR\fIbuf\fR, \fBsize_t\fR \fIsize\fR);
-.fi
-
-.SH DESCRIPTION
-.sp
-.LP
-The \fBgetcwd()\fR function places an absolute pathname of the current working
-directory in the array pointed to by \fIbuf\fR, and returns \fIbuf\fR. The
-pathname copied to the array contains no components that are symbolic links.
-The \fIsize\fR argument is the size in bytes of the character array pointed to
-by \fIbuf\fR and must be at least one greater than the length of the pathname
-to be returned.
-.sp
-.LP
-If \fIbuf\fR is not a null pointer, the pathname is stored in the space pointed
-to by \fIbuf\fR.
-.sp
-.LP
-If \fIbuf\fR is a null pointer, \fBgetcwd()\fR obtains \fIsize\fR bytes of
-space using \fBmalloc\fR(3C). The pointer returned by \fBgetcwd()\fR can be
-used as the argument in a subsequent call to \fBfree()\fR.
-.SH RETURN VALUES
-.sp
-.LP
-Upon successful completion, \fBgetcwd()\fR returns the \fIbuf\fR argument. If
-\fIbuf\fR is an invalid destination buffer address, \fINULL\fR is returned and
-\fBerrno\fR is set to \fBEFAULT\fR. Otherwise, a null pointer is returned and
-\fBerrno\fR is set to indicate the error.
-.SH ERRORS
-.sp
-.LP
-The \fBgetcwd()\fR function will fail if:
-.sp
-.ne 2
-.na
-\fB\fBEFAULT\fR\fR
-.ad
-.RS 10n
-The \fIbuf\fR argument is an invalid destination buffer address.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBEINVAL\fR\fR
-.ad
-.RS 10n
-The \fIsize\fR argument is equal to 0.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBERANGE\fR\fR
-.ad
-.RS 10n
-The \fIsize\fR argument is greater than 0 and less than the length of the
-pathname plus 1.
-.RE
-
-.sp
-.LP
-The \fBgetcwd()\fR function may fail if:
-.sp
-.ne 2
-.na
-\fB\fBEACCES\fR\fR
-.ad
-.RS 10n
-A parent directory cannot be read to get its name.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBENOMEM\fR\fR
-.ad
-.RS 10n
-Insufficient storage space is available.
-.RE
-
-.SH EXAMPLES
-.LP
-\fBExample 1 \fRDetermine the absolute pathname of the current working
+.Dd February 27, 2021
+.Dt GETCWD 3C
+.Os
+.Sh NAME
+.Nm getcwd
+.Nd get pathname of current working directory
+.Sh SYNOPSIS
+.In unistd.h
+.Ft "char *"
+.Fo getcwd
+.Fa "char *buf"
+.Fa "size_t size"
+.Fc
+.Sh DESCRIPTION
+The
+.Fn getcwd
+function returns a pointer to a buffer containing the absolute pathname of the
+current working directory.
+The returned pathname contains no components that are symbolic links.
+.Pp
+When
+.Fa buf
+is not
+.Dv NULL ,
+the absolute pathname will be written into
+.Fa buf
+and
+.Fa size
+represents the length in bytes of
+.Fa buf .
+If the length of the pathname and nul terminator exceeds
+.Fa size ,
+nothing will be written and
+.Fn getcwd
+will return
+.Dv NULL .
+Otherwise,
+.Fn getcwd
+returns
+.Fa buf .
+.Pp
+When
+.Fa buf
+is
+.Dv NULL
+then
+.Fn getcwd
+will allocate memory in which to store the pathname of the current working
directory.
-.sp
-.LP
+If
+.Fa size
+is non-zero, then
+.Fa size
+bytes will be allocated.
+If the length of the pathname and nul terminator exceeds
+.Fa size ,
+the memory will be freed and
+.Fn getcwd
+will return
+.Dv NULL .
+If
+.Fa size
+is zero, then
+.Fn getcwd
+will attempt to allocate enough space to hold the pathname.
+In both cases, it is the caller's responsibility to free the returned buffer
+with the
+.Xr free 3C
+function.
+.Sh RETURN VALUES
+Upon successful completion, the
+.Fn getcwd
+function returns a pointer to a buffer containing the pathname.
+Otherwise,
+.Dv NULL
+is returned and
+.Va errno
+is set to indicate the error.
+.Sh EXAMPLES
+.Sy Example 1
+Determine the absolute pathname of the current working directory.
+.Pp
The following example returns a pointer to an array that holds the absolute
-pathname of the current working directory. The pointer is returned in the
-\fIptr\fR variable, which points to the \fIbuf\fR array where the pathname is
-stored.
-
-.sp
-.in +2
-.nf
+pathname of the current working directory.
+The pointer is returned in the
+.Va ptr
+variable, which points to the
+.Va buf
+array where the pathname is stored.
+.Bd -literal -offset Ds
#include <stdlib.h>
#include <unistd.h>
\&...
@@ -155,64 +143,75 @@ char *buf;
char *ptr;
size = pathconf(".", _PC_PATH_MAX);
if ((buf = (char *)malloc((size_t)size)) != NULL)
- ptr = getcwd(buf, (size_t)size);
+ ptr = getcwd(buf, (size_t)size);
\&...
-.fi
-.in -2
-
-.LP
-\fBExample 2 \fRPrint the current working directory.
-.sp
-.LP
+.Ed
+.Pp
+.Sy Example 2
+Print the current working directory.
+.Pp
The following example prints the current working directory.
-
-.sp
-.in +2
-.nf
-#include <unistd.h>
+.Bd -literal -offset Ds
#include <stdio.h>
+#include <unistd.h>
-main(\|)
+int
+main(void)
{
- char *cwd;
- if ((cwd = getcwd(NULL, 64)) == NULL) {
- perror("pwd");
- exit(2);
- }
- (void)printf("%s\en", cwd);
- free(cwd); /* free memory allocated by getcwd() */
- return(0);
-}
-.fi
-.in -2
+ char *cwd;
-.SH USAGE
-.sp
-.LP
-Applications should exercise care when using \fBchdir\fR(2) in conjunction with
-\fBgetcwd()\fR. The current working directory is global to all threads within a
-process. If more than one thread calls \fBchdir()\fR to change the working
-directory, a subsequent call to \fBgetcwd()\fR could produce unexpected
-results.
-.SH ATTRIBUTES
-.sp
-.LP
-See \fBattributes\fR(5) for descriptions of the following attributes:
-.sp
-
-.sp
-.TS
-box;
-c | c
-l | l .
-ATTRIBUTE TYPE ATTRIBUTE VALUE
-_
-Interface Stability Standard
-_
-MT-Level MT-Safe
-.TE
-
-.SH SEE ALSO
-.sp
-.LP
-\fBchdir\fR(2), \fBmalloc\fR(3C), \fBattributes\fR(5), \fBstandards\fR(5)
+ if ((cwd = getcwd(NULL, 0)) == NULL) {
+ perror("pwd");
+ exit(2);
+ }
+ (void)printf("%s\en", cwd);
+ free(cwd); /* free memory allocated by getcwd() */
+ return(0);
+}
+.Ed
+.Sh ERRORS
+The
+.Fn getcwd
+function will fail if:
+.Bl -tag -width Er
+.It Er EFAULT
+The
+.Fa buf
+argument points to an invalid address.
+.It Er EINVAL
+The
+.Fa buf
+argument is not
+.Dv NULL
+and the
+.Fa size
+argument is 0.
+.It Er ERANGE
+The pathname
+.Pq including its terminating nul character
+is too long to fit into the provided
+.Pq or allocated
+buffer.
+.It Er EACCESS
+A parent directory cannot be read to get its name.
+.It Er ENOMEM
+Insufficient storage space is available.
+.El
+.Sh USAGE
+Applications should exercise care when using
+.Xr chdir 2
+in conjunction with
+.Fn getcwd .
+The current working directory is global to all threads within a process.
+If more than one thread calls
+.Xr chdir 2
+to change the working directory, a subsequent call to
+.Fn getcwd
+could produce unexpected results.
+.Sh INTERFACE STABILITY
+.Sy Committed
+.Sh SEE ALSO
+.Xr chdir 2 ,
+.Xr free 3C ,
+.Xr attributes 5 ,
+.Xr standards 5