.fp 5 CW .de Af .ds ;G \\*(;G\\f\\$1\\$3\\f\\$2 .if !\\$4 .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" .. .de aF .ie \\$3 .ft \\$1 .el \{\ .ds ;G \& .nr ;G \\n(.f .Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9" \\*(;G .ft \\n(;G \} .. .de L .aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" .. .de LR .aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" .. .de RL .aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" .. .de EX \" start example .ta 1i 2i 3i 4i 5i 6i .PP .RS .PD 0 .ft 5 .nf .. .de EE \" end example .fi .ft .PD .RE .PP .. .TH PREROOT 3 .SH NAME preroot \- preroot support .SH SYNOPSIS .EX #include char* getpreroot(char* \fIpath\fP, char* \fIcmd\fP); int ispreroot(char* \fIdir\fP); int realopen(char* \fIpath\fP, int \fImode\fP, int \fIperm\fP); void setpreroot(char** \fIargv\fP, char* \fIdir\fP); .EE .SH DESCRIPTION The .I preroot routines manipulate the process preroot. .I preroot is a kernel supported per-process two level viewpath. All pathnames rooted at .L / are first searched for in the process preroot directory and then in the system root directory. Setting the process preroot is a priveleged operation controlled by the .IR /etc/preroot (1) command. .PP .L defines the symbol .B FS_PREROOT for those systems that support preroot. The following routines are valid only when .B FS_PREROOT is defined: .TP .L getpreroot returns a pointer to the absolute pathname of the preroot directory for the executable .IR cmd . The result is placed in .IR path . If .I path is .B 0 then .IR malloc (3) is used to allocate the pathname space. .B 0 is returned if .I cmd has no preroot or if an error was encountered. In this case .I errno is set to indicate the error. .TP .L ispreroot Non-zero is returned if .I dir is the current process preroot. If .I dir is .B 0 then non-zero is returned if the current process has a preroot. .TP .L realopen temporarily disables the process preroot and does an .IR open (3) relative to the system root directory. The return value from .I open is returned. If there is no preroot then .I realopen is equivalent to .IR open . .TP .L setpreroot calls .IR execvp (3) as .L "execvp(a\fIrgv\fP[0],\fIargv\fP)" with the process preroot set to .IR dir . .I argv must be a .BR 0 -terminated argument array. If .I argv is .B 0 then the value of .I opt_argv from .IR optget (3) is used. .L setpreroot returns immediately if .I dir is already the process preroot. .SH "SEE ALSO" /etc/preroot(1) .SH BUGS Preroot semantics should be preserved when reading directories. The .I ast .IR directory (3) routines do this. .IR 3d (1) viewpathing does .I preroot the right way.