8354 sync regcomp(3C) with upstream (fix make catalog)
[unleashed/tickless.git] / usr / src / lib / libast / common / man / preroot.3
blob025fc221c0b2882227fc34e723059786dd65da70
1 .fp 5 CW
2 .de Af
3 .ds ;G \\*(;G\\f\\$1\\$3\\f\\$2
4 .if !\a\\$4\a\a .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
5 ..
6 .de aF
7 .ie \a\\$3\a\a .ft \\$1
8 .el \{\
9 .ds ;G \&
10 .nr ;G \\n(.f
11 .Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
12 \\*(;G
13 .ft \\n(;G \}
15 .de L
16 .aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
18 .de LR
19 .aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
21 .de RL
22 .aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
24 .de EX          \" start example
25 .ta 1i 2i 3i 4i 5i 6i
26 .PP
27 .RS 
28 .PD 0
29 .ft 5
30 .nf
32 .de EE          \" end example
33 .fi
34 .ft
35 .PD
36 .RE
37 .PP
39 .TH PREROOT 3
40 .SH NAME
41 preroot \- preroot support
42 .SH SYNOPSIS
43 .EX
44 #include <preroot.h>
46 char*    getpreroot(char* \fIpath\fP, char* \fIcmd\fP);
47 int      ispreroot(char* \fIdir\fP);
48 int      realopen(char* \fIpath\fP, int \fImode\fP, int \fIperm\fP);
49 void     setpreroot(char** \fIargv\fP, char* \fIdir\fP);
50 .EE
51 .SH DESCRIPTION
52 The
53 .I preroot
54 routines manipulate the process preroot.
55 .I preroot
56 is a kernel supported per-process two level viewpath.
57 All pathnames rooted at
58 .L /
59 are first searched for in the process preroot directory
60 and then in the system root directory.
61 Setting the process preroot is a priveleged operation controlled by the
62 .IR /etc/preroot (1)
63 command.
64 .PP
65 .L <preroot.h>
66 defines the symbol
67 .B FS_PREROOT
68 for those systems that support preroot.
69 The following routines are valid only when
70 .B FS_PREROOT
71 is defined:
72 .TP
73 .L getpreroot
74 returns a pointer to the absolute pathname of the preroot directory
75 for the executable
76 .IR cmd .
77 The result is placed in
78 .IR path .
80 .I path
82 .B 0
83 then
84 .IR malloc (3)
85 is used to allocate the pathname space.
86 .B 0
87 is returned if
88 .I cmd
89 has no preroot or if an error was encountered.
90 In this case
91 .I errno
92 is set to indicate the error.
93 .TP
94 .L ispreroot
95 Non-zero is returned if 
96 .I dir
97 is the current process preroot.
98 If 
99 .I dir
101 .B 0
102 then non-zero is returned if the current process has a preroot.
104 .L realopen
105 temporarily disables the process preroot and does an
106 .IR open (3)
107 relative to the system root directory.
108 The return value from
109 .I open
110 is returned.
111 If there is no preroot then
112 .I realopen
113 is equivalent to
114 .IR open .
116 .L setpreroot
117 calls
118 .IR execvp (3)
120 .L "execvp(a\fIrgv\fP[0],\fIargv\fP)"
121 with the process preroot set to
122 .IR dir .
123 .I argv
124 must be a
125 .BR 0 -terminated
126 argument array.
127 If 
128 .I argv
130 .B 0
131 then the value of
132 .I opt_argv
133 from
134 .IR optget (3)
135 is used.
136 .L setpreroot
137 returns immediately if
138 .I dir
139 is already the process preroot.
140 .SH "SEE ALSO"
141 /etc/preroot(1)
142 .SH BUGS
143 Preroot semantics should be preserved when reading directories.
145 .I ast
146 .IR directory (3)
147 routines do this.
148 .IR 3d (1)
149 viewpathing does 
150 .I preroot
151 the right way.