getconf: don't include xpg4 bits, gcc7 includes xpg6 bits for us
[unleashed.git] / share / man / man1 / pathchk.1
blobf3d77e54c09fb4b35f29fee785b68b789b36b99a
1 .\"
2 .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for
3 .\" permission to reproduce portions of its copyrighted documentation.
4 .\" Original documentation from The Open Group can be obtained online at
5 .\" http://www.opengroup.org/bookstore/.
6 .\"
7 .\" The Institute of Electrical and Electronics Engineers and The Open
8 .\" Group, have given us permission to reprint portions of their
9 .\" documentation.
10 .\"
11 .\" In the following statement, the phrase ``this text'' refers to portions
12 .\" of the system documentation.
13 .\"
14 .\" Portions of this text are reprinted and reproduced in electronic form
15 .\" in the SunOS Reference Manual, from IEEE Std 1003.1, 2004 Edition,
16 .\" Standard for Information Technology -- Portable Operating System
17 .\" Interface (POSIX), The Open Group Base Specifications Issue 6,
18 .\" Copyright (C) 2001-2004 by the Institute of Electrical and Electronics
19 .\" Engineers, Inc and The Open Group.  In the event of any discrepancy
20 .\" between these versions and the original IEEE and The Open Group
21 .\" Standard, the original IEEE and The Open Group Standard is the referee
22 .\" document.  The original Standard can be obtained online at
23 .\" http://www.opengroup.org/unix/online.html.
24 .\"
25 .\" This notice shall appear on any product containing this material.
26 .\"
27 .\" The contents of this file are subject to the terms of the
28 .\" Common Development and Distribution License (the "License").
29 .\" You may not use this file except in compliance with the License.
30 .\"
31 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
32 .\" or http://www.opensolaris.org/os/licensing.
33 .\" See the License for the specific language governing permissions
34 .\" and limitations under the License.
35 .\"
36 .\" When distributing Covered Code, include this CDDL HEADER in each
37 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
38 .\" If applicable, add the following below this CDDL HEADER, with the
39 .\" fields enclosed by brackets "[]" replaced with your own identifying
40 .\" information: Portions Copyright [yyyy] [name of copyright owner]
41 .\"
42 .\"
43 .\" Copyright (c) 1992, X/Open Company Limited.  All Rights Reserved.
44 .\" Portions Copyright (c) 1996, Sun Microsystems, Inc.  All Rights Reserved
45 .\"
46 .TH PATHCHK 1 "Feb 1, 1995"
47 .SH NAME
48 pathchk \- check path names
49 .SH SYNOPSIS
50 .LP
51 .nf
52 \fBpathchk\fR [\fB-p\fR] \fIpath\fR...
53 .fi
55 .SH DESCRIPTION
56 .sp
57 .LP
58 The \fBpathchk\fR command will check that one or more path names are valid
59 (that is, they could be used to access or create a file without causing syntax
60 errors) and portable (that is, no filename truncation will result). More
61 extensive portability checks are provided by the \fB-p\fR option.
62 .sp
63 .LP
64 By default, \fBpathchk\fR will check each component of each \fIpath\fR operand
65 based on the underlying file system. A diagnostic will be written for each
66 \fIpath\fR operand that:
67 .RS +4
68 .TP
69 .ie t \(bu
70 .el o
71 is longer than \fIPATH_MAX\fR bytes.
72 .RE
73 .RS +4
74 .TP
75 .ie t \(bu
76 .el o
77 contains any component longer than \fINAME_MAX\fR bytes in its containing
78 directory
79 .RE
80 .RS +4
81 .TP
82 .ie t \(bu
83 .el o
84 contains any component in a directory that is not searchable
85 .RE
86 .RS +4
87 .TP
88 .ie t \(bu
89 .el o
90 contains any character in any component that is not valid in its containing
91 directory.
92 .RE
93 .sp
94 .LP
95 The format of the diagnostic message is not specified, but will indicate the
96 error detected and the corresponding \fIpath\fR operand.
97 .sp
98 .LP
99 It will not be considered an error if one or more components of a \fIpath\fR
100 operand do not exist as long as a file matching the path name specified by the
101 missing components could be created that does not violate any of the checks
102 specified above.
103 .SH OPTIONS
106 The following option is supported:
108 .ne 2
110 \fB\fB-p\fR\fR
112 .RS 6n
113 Instead of performing checks based on the underlying file system, write a
114 diagnostic for each \fIpath\fR operand that:
115 .RS +4
117 .ie t \(bu
118 .el o
119 is longer than \fB_POSIX_PATH_MAX \fR bytes
121 .RS +4
123 .ie t \(bu
124 .el o
125 contains any component longer than \fB_POSIX_NAME_MAX\fR bytes
127 .RS +4
129 .ie t \(bu
130 .el o
131 contains any character in any component that is not in the portable filename
132 character set.
136 .SH OPERANDS
139 The following operand is supported:
141 .ne 2
143 \fB\fIpath\fR\fR
145 .RS 8n
146 A path to be checked.
149 .SH USAGE
152 See \fBlargefile\fR(5) for the description of the behavior of \fBpathchk\fR
153 when encountering files greater than or equal to 2 Gbyte ( 2^31 bytes).
154 .SH EXAMPLES
156 \fBExample 1 \fRUsing the pathchk command
159 To verify that all paths in an imported data interchange archive are legitimate
160 and unambiguous on the current system:
163 .in +2
165 example% \fBpax -f archive | sed -e '/ == .*/s///' | xargs pathchk
166 if [ $? -eq 0 ]
167 then
168         pax -r -f archive
169 else
170         echo Investigate problems before importing files.
171         exit 1
172 fi\fR
174 .in -2
179 To verify that all files in the current directory hierarchy could be moved to
180 any system conforming to the X/Open specification that also  supports the
181 \fBpax\fR(1) command:
184 .in +2
186 example% \fBfind . -print | xargs pathchk -p
187 if [ $? \(mieq 0 ]
188 then
189         pax -w -f archive .
190 else
191         echo Portable archive cannot be created.
192         exit 1
193 fi\fR
195 .in -2
200 To verify that a user-supplied path names a readable file and that the
201 application can create a file extending the given path without truncation and
202 without overwriting any existing file:
205 .in +2
207 example% \fBcase $- in
208         *C*)    reset="";;
209         *)      reset="set +C"
210                 set -C;;
211 esac
212 test -r "$path" && pathchk "$path.out" &&
213         rm "$path.out" > "$path.out"
214 if [ $? -ne 0 ]; then
215         printf "%s: %s not found or %s.out fails \e
216 creation checks.\en" $0 "$path" "$path"
217         $reset  # reset the noclobber option in case a trap
218                 # on EXIT depends on it
219         exit 1
221 $reset
222 PROCESSING < "$path" > "$path.out"\fR
224 .in -2
229 The following assumptions are made in this example:
231 .RS +4
234 \fBPROCESSING\fR represents the code that will be used by the application to
235 use \fB$path\fR once it is verified that \fB$path.out\fR will work as intended.
237 .RS +4
240 The state of the \fBnoclobber\fR option is unknown when this code is invoked
241 and should be set on exit to the state it was in when this code was invoked.
242 (The \fBreset\fR variable is used in this example to restore the initial
243 state.)
245 .RS +4
248 Note the usage of:
250 .in +2
252 \fBrm "$path.out" > "$path.out"\fR
254 .in -2
258 .ne 2
260 \fBa.\fR
262 .RS 6n
263 The \fBpathchk\fR command has already verified, at this point, that
264 \fB$path.out\fR will not be truncated.
268 .ne 2
270 \fBb.\fR
272 .RS 6n
273 With the \fBnoclobber\fR option set, the shell will verify that \fB$path.out\fR
274 does not already exist before invoking \fBrm\fR.
278 .ne 2
280 \fBc.\fR
282 .RS 6n
283 If the shell succeeded in creating \fB$path.out\fR, \fBrm\fR will remove it so
284 that the application can create the file again in the \fBPROCESSING\fR step.
288 .ne 2
290 \fBd.\fR
292 .RS 6n
293 If the \fBPROCESSING\fR step wants the file to exist already when it is
294 invoked, the:
296 .in +2
298 \fBrm "$path.out" > "$path.out"\fR
300 .in -2
303 should be replaced with:
305 .in +2
307 \fB> "$path.out"\fR
309 .in -2
312 which will verify that the file did not already exist, but leave
313 \fB$path.out\fR in place for use by \fBPROCESSING\fR.
317 .SH ENVIRONMENT VARIABLES
320 See \fBenviron\fR(5) for descriptions of the following environment variables
321 that affect the execution of \fBpathchk\fR: \fBLANG\fR, \fBLC_ALL\fR,
322 \fBLC_CTYPE\fR, \fBLC_MESSAGES\fR, and \fBNLSPATH\fR.
323 .SH EXIT STATUS
326 The following exit values are returned:
328 .ne 2
330 \fB\fB0\fR\fR
332 .RS 6n
333 All \fIpath\fR operands passed all of the checks.
337 .ne 2
339 \fB\fB>0\fR\fR
341 .RS 6n
342 An error occurred.
345 .SH ATTRIBUTES
348 See \fBattributes\fR(5) for descriptions of the following attributes:
353 box;
354 c | c
355 l | l .
356 ATTRIBUTE TYPE  ATTRIBUTE VALUE
358 Interface Stability     Standard
361 .SH SEE ALSO
364 \fBpax\fR(1), \fBtest\fR(1), \fBattributes\fR(5), \fBenviron\fR(5),
365 \fBlargefile\fR(5), \fBstandards\fR(5)