xref: /freebsd/lib/libc/gen/setmode.3 (revision 22cf89c938886d14f5796fc49f9f020c23ea8eaf)
1.\" Copyright (c) 1989, 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.\"     @(#)setmode.3	8.2 (Berkeley) 4/28/95
29.\"
30.Dd July 18, 2019
31.Dt SETMODE 3
32.Os
33.Sh NAME
34.Nm getmode ,
35.Nm setmode
36.Nd modify mode bits
37.Sh LIBRARY
38.Lb libc
39.Sh SYNOPSIS
40.In unistd.h
41.Ft mode_t
42.Fn getmode "const void *set" "mode_t mode"
43.Ft void *
44.Fn setmode "const char *mode_str"
45.Sh DESCRIPTION
46The
47.Fn getmode
48function
49returns a copy of the file permission bits
50.Fa mode
51as altered by the values pointed to by
52.Fa set .
53While only the mode bits are altered, other parts of the file mode
54may be examined.
55.Pp
56The
57.Fn setmode
58function
59takes an absolute (octal) or symbolic value, as described in
60.Xr chmod 1 ,
61as an argument
62and returns a pointer to mode values to be supplied to
63.Fn getmode .
64Because some of the symbolic values are relative to the file
65creation mask,
66.Fn setmode
67may call
68.Xr umask 2 .
69If this occurs, the file creation mask will be restored before
70.Fn setmode
71returns.
72If the calling program changes the value of its file creation mask
73after calling
74.Fn setmode ,
75.Fn setmode
76must be called again if
77.Fn getmode
78is to modify future file modes correctly.
79.Pp
80If the mode passed to
81.Fn setmode
82is invalid or if memory cannot be allocated for the return value,
83.Fn setmode
84returns
85.Dv NULL .
86.Pp
87The value returned from
88.Fn setmode
89is obtained from
90.Fn malloc
91and should be returned to the system with
92.Fn free
93when the program is done with it, generally after a call to
94.Fn getmode .
95.Sh ERRORS
96The
97.Fn setmode
98function
99may fail and set errno for any of the errors specified for the library
100routine
101.Xr malloc 3
102or
103.Xr strtol 3 .
104In addition,
105.Fn setmode
106will fail and set
107.Va errno
108to:
109.Bl -tag -width Er
110.It Bq Er EINVAL
111The
112.Fa mode
113argument does not represent a valid mode.
114.El
115.Sh SEE ALSO
116.Xr chmod 1 ,
117.Xr stat 2 ,
118.Xr umask 2 ,
119.Xr malloc 3
120.Sh HISTORY
121The
122.Fn getmode
123and
124.Fn setmode
125functions first appeared in
126.Bx 4.4 .
127.Sh BUGS
128The
129.Fn setmode
130function is not thread safe.
131Files created in other threads while
132.Fn setmode
133is being called may be created with a umask of 0.
134