1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1987-2011 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                 Eclipse Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *          http://www.eclipse.org/org/documents/epl-v10.html           *
11 *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                 Glenn Fowler <gsf@research.att.com>                  *
18 *                                                                      *
19 ***********************************************************************/
20 #pragma prototyped
21 
22 /*
23  * pax option table
24  */
25 
26 #include "pax.h"
27 
28 Option_t		options[] =
29 {
30 {
31 	0,
32 },
33 {
34 	"action",
35 	'A',
36 	OPT_action,
37 	"Input/output file path match and filter command. \acommand\a\
38 	is applied to each file that matches \apattern\a as it is read\
39 	from or written to the archive. \bX\b is any delimiter not occurring\
40 	in \apattern\a. \acommand\a is split into space separated arguments,\
41 	and is executed with the pathname of the file to be processed as the\
42 	last argument. The standard output of the resulting command is read\
43 	by \bpax\b.",
44 	"\bX\bpattern\bX\bcommand",
45 },
46 {
47 	"append",
48 	'a',
49 	OPT_append,
50 	"Append to end of archive.",
51 },
52 {
53 	"atime",
54 	0,
55 	OPT_atime,
56 	"Preserve or set file access times.",
57 	"time",
58 	0,
59 	OPT_HEADER|OPT_OPTIONAL,
60 	4
61 },
62 {
63 	"base",
64 	'z',
65 	OPT_base,
66 	"Two archives are required for delta operations. \b--file\b names\
67 	the delta archive and \b--base\b names the delta base archive.\
68 	If \aarchive\a is \b-\b then the base is ignored (the actual delta\
69 	sizes are reported and restored) on input and the delta is\
70 	compressed on output.",
71 	"archive",
72 },
73 {
74 	"blocksize",
75 	'b',
76 	OPT_blocksize,
77 	"Input/output block size. The default is format specific.",
78 	"size",
79 	0,
80 	OPT_NUMBER,
81 },
82 {
83 	"blok",
84 	0,
85 	OPT_blok,
86 	"Input/output BLOK format for tapes on file.",
87 	"i|o",
88 	0,
89 	OPT_OPTIONAL,
90 },
91 {
92 	"charset",
93 	0,
94 	OPT_charset,
95 	"Data character set name. The character set names are:",
96 	"charset",
97 	"\fcharsets\f",
98 	0,
99 	OPT_HEADER,
100 },
101 {
102 	"checksum",
103 	0,
104 	OPT_checksum,
105 	"Generate a \amethod\a checksum file for each archive member and add\
106 	the resulting file as the archive member \apath\a. See \bsum\b(1) for\
107 	supported checksum methods; \bmd5\b is a good candidate. The generated\
108 	file is suitable for input to \bsum --check --permissions\b.",
109 	"method::path",
110 },
111 {
112 	"chksum",
113 	0,
114 	OPT_chksum,
115 	"The header checksum string; empty if not supported.",
116 	0,
117 	0,
118 	OPT_READONLY,
119 },
120 {
121 	"chmod",
122 	'C',
123 	OPT_chmod,
124 	"Apply the \bchmod\b(1) \amode\a expression to file modes\
125 	written to archive headers.",
126 	"mode"
127 },
128 {
129 	"clobber",
130 	'k',
131 	OPT_clobber,
132 	"Overwrite output files.",
133 	0,
134 	0,
135 	OPT_INVERT,
136 },
137 {
138 	"comment",
139 	0,
140 	OPT_comment,
141 	"Comment text.",
142 	"text",
143 	0,
144 	OPT_HEADER,
145 },
146 {
147 	"complete",
148 	0,
149 	OPT_complete,
150 	"Complete archive must fit in one media part.",
151 },
152 {
153 	"crossdevice",
154 	'X',
155 	OPT_crossdevice,
156 	"Directory traversal may cross device boundaries.",
157 	0,
158 	0,
159 	OPT_INVERT,
160 },
161 {
162 	"ctime",
163 	0,
164 	OPT_ctime,
165 	"Preserve or set file change times.",
166 	"time",
167 	0,
168 	OPT_HEADER|OPT_OPTIONAL,
169 },
170 {
171 	"debug",
172 	'D',
173 	OPT_debug,
174 	"Set debug trace level. Higher levels produce more output.",
175 	"level",
176 	0,
177 	OPT_NUMBER,
178 },
179 {
180 	"delete",
181 	0,
182 	OPT_delete,
183 	"\bdelete\b=\apattern\a ignores all global and extended header keywords\
184 	matching the \bksh\b(1) \apattern\a.",
185 	"pattern",
186 },
187 {
188 	"delta.base.checksum",
189 	0,
190 	OPT_delta_base_checksum,
191 	"The delta base archive checksum.",
192 	"checksum",
193 	0,
194 	OPT_GLOBAL|OPT_READONLY|OPT_NUMBER|OPT_VENDOR,
195 },
196 {
197 	"delta.base.size",
198 	0,
199 	OPT_delta_base_size,
200 	"The delta base archive size.",
201 	"size",
202 	0,
203 	OPT_GLOBAL|OPT_READONLY|OPT_NUMBER|OPT_VENDOR,
204 },
205 {
206 	"delta.checksum",
207 	0,
208 	OPT_delta_checksum,
209 	"The delta archive checksum not including the current entry.",
210 	"checksum",
211 	0,
212 	OPT_GLOBAL|OPT_READONLY|OPT_NUMBER|OPT_VENDOR,
213 },
214 {
215 	"delta.compress",
216 	0,
217 	OPT_delta_compress,
218 	"The delta base archive is \b/dev/null\b.",
219 	0,
220 	0,
221 	OPT_GLOBAL|OPT_READONLY|OPT_VENDOR,
222 },
223 {
224 	"delta.index",
225 	0,
226 	OPT_delta_index,
227 	"The base file index (ordinal) of the current delta archive entry.",
228 	"index",
229 	0,
230 	OPT_GLOBAL|OPT_READONLY|OPT_NUMBER|OPT_VENDOR,
231 },
232 {
233 	"delta.method",
234 	0,
235 	OPT_delta_method,
236 	"The delta method. Supported methods are:",
237 	"method",
238 	"\fDELTA\f",
239 	OPT_GLOBAL|OPT_VENDOR,
240 },
241 {
242 	"delta.op",
243 	0,
244 	OPT_delta_op,
245 	"The current delta archive entry read mode operation:",
246 	"op",
247 	"[c:create?The file is not in the base archive and will be created.]\
248 	 [d:delete?The file will be deleted.]\
249 	 [p:pass?The file is not a delta and will be copied verbatim.]\
250 	 [u:update?The file is a delta and will be updated against the\
251 		corresponding base archive entry.]\
252 	 [v:verify?No data change but the file metatdata will be updated\
253 		to match the delta archive.]\
254 	",
255 	OPT_GLOBAL|OPT_READONLY|OPT_VENDOR,
256 },
257 {
258 	"delta.ordered",
259 	0,
260 	OPT_delta_ordered,
261 	"The base and delta archive members are ordered (sorted) by name.",
262 	0,
263 	0,
264 	OPT_GLOBAL|OPT_READONLY|OPT_VENDOR,
265 },
266 {
267 	"delta.update",
268 	0,
269 	OPT_delta_update,
270 	"Only update files in the delta -- do not update files in the base that are not in the delta.",
271 	0,
272 	0,
273 	OPT_GLOBAL|OPT_VENDOR,
274 },
275 {
276 	"delta.version",
277 	0,
278 	OPT_delta_version,
279 	"The delta method version.",
280 	"version",
281 	0,
282 	OPT_GLOBAL|OPT_READONLY|OPT_VENDOR,
283 },
284 {
285 	"descend",
286 	'd',
287 	OPT_descend,
288 	"Command line directories name themselves and descendents.",
289 	0,
290 	0,
291 	OPT_INVERT,
292 },
293 {
294 	"device",
295 	0,
296 	OPT_device,
297 	"The device major and minor number string, empty if not a device file.",
298 	0,
299 	0,
300 	OPT_READONLY,
301 },
302 {
303 	"devmajor",
304 	0,
305 	OPT_devmajor,
306 	"The major device number, 0 if not supported.",
307 	0,
308 	0,
309 	OPT_READONLY,
310 },
311 {
312 	"devminor",
313 	0,
314 	OPT_devminor,
315 	"The minor device number, 0 if not supported.",
316 	0,
317 	0,
318 	OPT_READONLY,
319 },
320 {
321 	"different",
322 	'U',
323 	OPT_different,
324 	"Only copy archive members that have different modify time, mode, or size\
325 	than the target files.  Target file names are checked after \b--edit\b\
326 	options are applied.",
327 },
328 {
329 	"dir",
330 	0,
331 	OPT_dir,
332 	"File directory name (base elided).",
333 	0,
334 	0,
335 	OPT_READONLY,
336 },
337 {
338 	"dots",
339 	0,
340 	OPT_dots,
341 	"Print a dot on the standard error for each block transferred.",
342 },
343 {
344 	"edit",
345 	's',
346 	OPT_edit,
347 	"Pathname substitution from \aold\a to \anew\a.\
348 	The first character is the expression delimiter.\
349 	There may be more than one edit expression;\
350 	each is applied in order from left to right.",
351 	",old,new,[glpsu]][i]]",
352 	"[+g?All \aold\a patterns.]\
353 	[+l?Convert \anew\a to lower case.]\
354 	[+p?Print the edit result on the standard error.]\
355 	[+s?Stop edits on path if this edit succeeds.]\
356 	[+u?Convert \anew\a to upper case.]\
357 	[+i?Append member index to pathname in \b.%04d format\b.]",
358 },
359 {
360 	"entry",
361 	0,
362 	OPT_entry,
363 	"File entry ordinal.",
364 	0,
365 	0,
366 	OPT_HEADER,
367 },
368 {
369 	"eom",
370 	0,
371 	OPT_eom,
372 	"End of media prompt or !\acommand\a. Processing terminates if\
373 	\b!\b\acommand\a returns non-zero exit status or if \b!\b is\
374 	specified.",
375 	"[!]][prompt]]",
376 },
377 {
378 	"exact",
379 	'n',
380 	OPT_exact,
381 	"Exit after each file arg matches exactly once.",
382 },
383 {
384 	"exthdr.name",
385 	0,
386 	OPT_extended_name,
387 	"Equivalent to \bheader\b:=\aformat\a.",
388 	"format",
389 },
390 {
391 	"file",
392 	'f',
393 	OPT_file,
394 	"The main archive file name.",
395 	"path",
396 },
397 {
398 	"filter",
399 	0,
400 	OPT_filter,
401 	"Input/output file filter command. \acommand\a is applied to each\
402 	file as it is read from or written to the archive. \acommand\a is\
403 	split into space separated arguments, and is executed with the\
404 	pathname of the file to be processed as the last argument.\
405 	The standard output of the resulting command is read by \bpax\b.\
406 	\b--nodescend\b is implied by \b--filter\b. If \acommand\a is \b-\b\
407 	and the archive is being written and there are no command line\
408 	\afile\a arguments, then each line on the standard input is\
409 	interpreted as a delimiter separated command:\
410 	\bX\b\aoptions\a\bX\b\acommand\a\bX\b\aphysical\a\bX\b\alogical\a,\
411 	where:",
412 	"command",
413 	"[+X?A delimiter character that does not appear outside quotes.]\
414 	[+options?\b,\b separated [\bno\b]]\aname\a[=\avalue\a]] options:]{\
415 		[+logical?Override the command line \b--logical\b and\
416 			\b--physical\b options for this file.]\
417 		[+physical?Override the command line \b--logical\b and\
418 			\b--physical\b options for this file.]\
419 	}\
420 	[+command?A shell command that reads the physical file and writes\
421 		the filtered contents to the standard output. If \acommand\a\
422 		is empty then the file contents are copied unchanged.]\
423 	[+physical?The actual file path, used for archive status.]\
424 	[+logical?The file path as it will appear in the archive. If\
425 		\alogical\a is empty then the \aphysical\a path is used. The\
426 		resulting path is still subject to any \b--edit\b options.]"
427 },
428 {
429 	"forceconvert",
430 	0,
431 	OPT_forceconvert,
432 	"Force \b--from\b conversion even if the data contains control\
433 	characters in the first 256 bytes.",
434 },
435 {
436 	"format",
437 	'x',
438 	OPT_format,
439 	"The archive format. Formats are automatically detected on read. A\
440 	basic, compress and delta format may be combined, separated by \b:\b.\
441 	Each format may be followed by =\bdetails\b; details are format\
442 	specific. The supported formats are:",
443 	"format:=" FMT_DEFAULT,
444 	"\fformats\f",
445 },
446 {
447 	"from",
448 	0,
449 	OPT_from,
450 	"File data input character set name.\
451 	Only files that have no control characters in the first 256 bytes\
452 	are converted. See \b--charset\b for supported character set names.",
453 	"charset",
454 	"\fcharsets\f",
455 },
456 {
457 	"gid",
458 	0,
459 	OPT_gid,
460 	"Group id. The default is the group id of the invoking process.",
461 	"group",
462 	0,
463 	OPT_HEADER|OPT_NUMBER,
464 },
465 {
466 	"globexthdr.name",
467 	0,
468 	OPT_global_name,
469 	"Equivalent to \bheader\b=\aformat\a.",
470 	"format",
471 },
472 {
473 	"gname",
474 	0,
475 	OPT_gname,
476 	"Group name. The default is the group name of the invoking process.",
477 	"group",
478 	0,
479 	OPT_HEADER,
480 },
481 {
482 	"hdrcharset",
483 	0,
484 	OPT_hdrcharset,
485 	"The name of the character set used to encode text fields in pax extended\
486 	header record text fields. See \b--charset\b for supported character\
487 	set names.",
488 	"charset",
489 	0,
490 	OPT_HEADER,
491 },
492 {
493 	"header",
494 	0,
495 	OPT_header,
496 	"\bheader\b=\aformat\a sets the global header path name format to the\
497 	\blistopt\b \aformat\a. The default is \b" HEADER_EXTENDED_STD "\b\
498 	when strict conformance is in effect (see \bgetconf\b(1) CONFORMANCE)\
499 	and \b" HEADER_EXTENDED "\b otherwise. \bheader\b:=\aformat\a\
500 	sets the extended header path name format to the \blistopt\b\
501 	\aformat\a. The default is \b" HEADER_GLOBAL_STD "\b when strict\
502 	conformance is in effect and \b" HEADER_GLOBAL "\b otherwise.\
503 	The strict conformance defaults are prone to global header filename\
504 	collisions and are ill-defined when extended header names exceed the\
505 	underlying header format limits.",
506 	"format",
507 },
508 {
509 	"ignore",
510 	0,
511 	OPT_ignore,
512 	"\bignore\b=\apattern\a ignores all global and extended header keywords\
513 	matching the \bksh\b(1) \apattern\a; \bignore\b:=\apattern\a ignores\
514 	all extended header keywords matching \apattern\a.",
515 	"pattern",
516 },
517 {
518 	"ino",
519 	0,
520 	OPT_ino,
521 	"The file serial number, 0 if not supported.",
522 	0,
523 	0,
524 	OPT_READONLY,
525 },
526 {
527 	"install",
528 	0,
529 	OPT_install,
530 	"Generate an installation \bsh\b(1) script file that contains\
531 	\bchmod\b(1), \bchgrp\b(1) and \bchown\b(1) commands to restore\
532 	file modes and ownership not supported by standard \bcpio\b(1)\
533 	and \btar\b(1). Only files with user or group specific\
534 	read/execute/setuid permissions are included in the script.\
535 	The script is added to the archive with member name \apath\a.",
536 	"path",
537 },
538 {
539 	"intermediate",
540 	'I',
541 	OPT_intermediate,
542 	"Copy each file to an intermediate name and rename to the\
543 	real name if the intermediate copy succeeds; otherwise retain\
544 	the original file and issue a diagnostic.",
545 },
546 {
547 	"invalid",
548 	0,
549 	OPT_invalid,
550 	"Invalid path action:",
551 	"action",
552 	"[b:binary?hdrcharset=BINARY extended header record for unencodable data.]\
553 	[i:bypass|ignore?Silently ignore.]\
554 	[p:rename|prompt?Prompt for new name.]\
555 	[t:write|translate?Automatically translate and/or truncate\
556 		to local specifications.]\
557 	[u:utf-8|UTF-8?Convert to UTF-8.]",
558 },
559 {
560 	"invert",
561 	'c',
562 	OPT_invert,
563 	"Invert pattern match sense. The !(...) construct is more general.",
564 },
565 {
566 	"keepgoing",
567 	'K',
568 	OPT_keepgoing,
569 	"Attempt to skip over damaged input archive data.",
570 },
571 {
572 	"label",
573 	0,
574 	OPT_label,
575 	"Append \astring\a to the volume label; \blabel\b:=\astring\a\
576 	prepends \astring\a.",
577 	"string",
578 },
579 {
580 	"link",
581 	'l',
582 	OPT_link,
583 	"Hard link files on output if possible.",
584 },
585 {
586 	"linkdata",
587 	0,
588 	OPT_linkdata,
589 	"Output data with each hard link. The default outputs the\
590 	data only with the first link in the archive.",
591 },
592 {
593 	"linkop",
594 	0,
595 	OPT_linkop,
596 	"The link operation string, \b==\b for hard links, \b->\b for\
597 	symbolic links, otherwise empty.",
598 	0,
599 	0,
600 	OPT_READONLY,
601 },
602 {
603 	"linkpath",
604 	0,
605 	OPT_linkpath,
606 	"Symbolic link pathname.",
607 	"path",
608 	0,
609 	OPT_HEADER,
610 },
611 {
612 	"listformat|listopt",
613 	0,
614 	OPT_listformat,
615 	"Append to the member listing format string. \aformat\a follows\
616 	\bprintf\b(3) conventions, except that \bsfio\b(3) inline ids\
617 	are used instead of arguments:\
618 	%[-+]][\awidth\a[.\aprecis\a[.\abase\a]]]]]](\aid\a[:\asubformat\a]])\achar\a.\
619 	If \achar\a is \bs\b then the string form of the item is listed,\
620 	otherwise the corresponding numeric form is listed. \asubformat\a\
621 	overrides the default formatting for \aid\a. All of the file related\
622 	options are supported as \aid\as, along with the following:",
623 	"format",
624 	"\flistformat\f",
625 },
626 {
627 	"listmacro",
628 	0,
629 	OPT_listmacro,
630 	"Define a \b--listformat\b macro.",
631 	"name[=value]]",
632 },
633 {
634 	"local",
635 	0,
636 	OPT_local,
637 	"Reject files and links that traverse outside the current directory.",
638 },
639 {
640 	"logical|follow",
641 	'L',
642 	OPT_logical,
643 	"Follow symbolic links. The default is determined by\
644 	\bgetconf PATH_RESOLVE\b.",
645 },
646 {
647 	"magic",
648 	0,
649 	OPT_magic,
650 	"The header magic string; empty if not supported.",
651 	0,
652 	0,
653 	OPT_READONLY,
654 },
655 {
656 	"mark",
657 	0,
658 	OPT_mark,
659 	"The file type mark character string:",
660 	0,
661 	"[+=?hard link]\
662 	[+@?symbolic link]\
663 	[+/?directory]\
664 	[+|?fifo]\
665 	[+=?socket]\
666 	[+$?block or character special]\
667 	[+*?executable]",
668 	OPT_READONLY,
669 },
670 {
671 	"maxout",
672 	0,
673 	OPT_maxout,
674 	"Output media size limit.",
675 	"size",
676 	0,
677 	OPT_NUMBER,
678 },
679 {
680 	"metaphysical",
681 	'H',
682 	OPT_metaphysical,
683 	"Follow command argument symbolic links, otherwise don't follow.\
684 	The default is determined by \bgetconf PATH_RESOLVE\b.",
685 },
686 {
687 	"meter",
688 	'm',
689 	OPT_meter,
690 	"Display a one line text meter showing archive read progress.\
691 	The input must be seekable. \bcompress\b and \bbzip\b uncompressed\
692 	input size is estimated.",
693 },
694 {
695 	"mkdir",
696 	0,
697 	OPT_mkdir,
698 	"Create intermediate directories on output. On by default.",
699 },
700 {
701 	"mode",
702 	0,
703 	OPT_mode,
704 	"The file type and acces mode.",
705 	0,
706 	0,
707 	OPT_READONLY,
708 },
709 {
710 	"mtime",
711 	0,
712 	OPT_mtime,
713 	"Preserve or set file modify times.",
714 	"time",
715 	0,
716 	OPT_HEADER|OPT_OPTIONAL,
717 },
718 {
719 	"name",
720 	0,
721 	OPT_name,
722 	"File base name (directory elided).",
723 	0,
724 	0,
725 	OPT_HEADER,
726 },
727 {
728 	"newer",
729 	'N',
730 	OPT_newer,
731 	"Only copy archive members that are newer than the target files.\
732 	Target file names are checked after \b--edit\b options are applied.",
733 },
734 {
735 	"nlink",
736 	0,
737 	OPT_nlink,
738 	"The hard link count.",
739 	0,
740 	0,
741 	OPT_READONLY,
742 },
743 {
744 	"options",
745 	'o',
746 	OPT_options,
747 	"Set options without leading -- from \astring\a.",
748 	"string",
749 },
750 {
751 	"ordered",
752 	'O',
753 	OPT_ordered,
754 	"Input files and base are ordered by name.",
755 },
756 {
757 	"owner",
758 	0,
759 	OPT_owner,
760 	"Change output file owner to current user or to \auid\a\
761 	if specified.",
762 	"uid",
763 },
764 {
765 	"passphrase",
766 	'E',
767 	OPT_passphrase,
768 	"Passphrase for formats that support encryption. The default value is"
769 	" prompted on and read from \b/dev/tty\b.",
770 	"passphrase",
771 },
772 {
773 	"path",
774 	0,
775 	OPT_path,
776 	"File path name.",
777 	"path",
778 	0,
779 	OPT_HEADER,
780 },
781 {
782 	"physical",
783 	'P',
784 	OPT_physical,
785 	"Don't follow symbolic links.\
786 	The default is determined by \bgetconf PATH_RESOLVE\b.",
787 },
788 {
789 	"pid",
790 	0,
791 	OPT_pid,
792 	"\bpax\b process id.",
793 },
794 {
795 	"preserve",
796 	'p',
797 	OPT_preserve,
798 	"Preserve selected file attributes:",
799 	"aemops",
800 	"[+a?Don't preserve access time.]\
801 	[+e?Preserve everything permissible.]\
802 	[+m?Don't preserve modify time.]\
803 	[+o?Preserve user, group, setuid and setgid.]\
804 	[+p?Preserve mode.]\
805 	[+s?Preserve setuid and setgid.]",
806 	OPT_OPTIONAL,
807 },
808 {
809 	"read",
810 	'r',
811 	OPT_read,
812 	"Read files from the archive.",
813 },
814 {
815 	"record-charset",
816 	0,
817 	OPT_record_charset,
818 	"Enable character set translation. On by default.",
819 },
820 {
821 	"record-delimiter",
822 	0,
823 	OPT_record_delimiter,
824 	"\bvdb\b format record delimiter character.\
825 	No delimiter if omitted. The default is ; .",
826 	"char",
827 },
828 {
829 	"record-format",
830 	0,
831 	OPT_record_format,
832 	"Labeled tape record format:",
833 	"DFSUV",
834 	"[+D?decimal variable]\
835 	[+F?fixed length]\
836 	[+S?spanned]\
837 	[+U?input block size]\
838 	[+B?binary variable]",
839 },
840 {
841 	"record-header",
842 	0,
843 	OPT_record_header,
844 	"Member header, NULL if omitted. The default value is format specific.",
845 },
846 {
847 	"record-line",
848 	0,
849 	OPT_record_line,
850 	"Records are lines. The default is format specific.",
851 },
852 {
853 	"record-match",
854 	0,
855 	OPT_record_match,
856 	"Select record formats that match \apattern\a.",
857 	"pattern",
858 },
859 {
860 	"record-pad",
861 	0,
862 	OPT_record_pad,
863 	"Pad records. The default is format specific.",
864 },
865 {
866 	"record-size",
867 	0,
868 	OPT_record_size,
869 	"Fixed length record size. The default is format specific.",
870 	"size",
871 	0,
872 	OPT_NUMBER,
873 },
874 {
875 	"record-trailer",
876 	0,
877 	OPT_record_trailer,
878 	"Member trailer, NULL if omitted. The default is format specific.",
879 	"string",
880 },
881 {
882 	"release",
883 	0,
884 	OPT_release,
885 	"The \bpax\b implementation release stamp.",
886 	"string",
887 	0,
888 	OPT_GLOBAL|OPT_READONLY|OPT_IGNORE|OPT_VENDOR,
889 },
890 {
891 	"reset-atime",
892 	't',
893 	OPT_reset_atime,
894 	"Reset the file access times of copied files.",
895 },
896 {
897 	"sequence",
898 	0,
899 	OPT_sequence,
900 	"The archive member sequence number. Numbers for volumes >1 are of the\
901 	form \avolume\a.\asequence\a.",
902 	0,
903 	0,
904 	OPT_READONLY,
905 },
906 {
907 	"size",
908 	0,
909 	OPT_size,
910 	"File size.",
911 	"size",
912 	0,
913 	OPT_HEADER|OPT_OPTIONAL,
914 	4
915 },
916 {
917 	"strict",
918 	'S',
919 	OPT_strict,
920 	"Disable non-standard extensions. The default is determined\
921 	by the \bgetconf\b(1) CONFORMANCE setting.",
922 },
923 {
924 	"summary",
925 	0,
926 	OPT_summary,
927 	"List summary information for each archive. On by default.",
928 },
929 {
930 	"symlink",
931 	0,
932 	OPT_symlink,
933 	"symlink files if possible.",
934 },
935 {
936 	"sync|fsync",
937 	'F',
938 	OPT_sync,
939 	"\bfsync\b(2) each file after it is copied.",
940 },
941 {
942 	"tape",
943 	0,
944 	OPT_tape,
945 	"Canonical tape unit name and operations.",
946 	"[#]][lmhcu]][n]][bv]][s[#]]]][k[#]]]]",
947 	"[+#?unit number [0-9]]]\
948 	[+l?low density]\
949 	[+m?medium density]\
950 	[+h?high density]\
951 	[+c?compressed]\
952 	[+u?uncompressed]\
953 	[+n?don't rewind on close]\
954 	[+b?bsd behavior]\
955 	[+v?system V behavior]\
956 	[+s[#]]?skip all [#]] volumes]\
957 	[+k[#]]?keep all [#]] volumes after skip]",
958 },
959 {
960 	"test",
961 	'T',
962 	OPT_test,
963 	"Test mask for debugging. Multiple values are or'ed together.",
964 	"mask",
965 	0,
966 	OPT_NUMBER,
967 },
968 {
969 	"testdate",
970 	0,
971 	OPT_testdate,
972 	"\b--listformat\b time values newer than \adate\a will be printed\
973 	as \adate\a. Used for regression testing.",
974 	"date",
975 },
976 {
977 	"times",
978 	0,
979 	OPT_times,
980 	"Preserve \batime\b, \bctime\b, and \bmtime\b.",
981 },
982 {
983 	"tmp",
984 	0,
985 	OPT_tmp,
986 	"The value of the \bTMPDIR\b environment variable if defined,\
987 	otherwise \b/tmp\b.",
988 },
989 {
990 	"to",
991 	0,
992 	OPT_to,
993 	"Output character set. See \b--charset\b for supported\
994 	character set names.",
995 	"name",
996 },
997 {
998 	"typeflag",
999 	0,
1000 	OPT_typeflag,
1001 	"The header type flag string; empty if not supported.",
1002 	0,
1003 	0,
1004 	OPT_READONLY,
1005 },
1006 {
1007 	"uid",
1008 	0,
1009 	OPT_uid,
1010 	"User id. The default is the user id of the invoking process.",
1011 	"user",
1012 	0,
1013 	OPT_HEADER|OPT_NUMBER,
1014 },
1015 {
1016 	"uname",
1017 	0,
1018 	OPT_uname,
1019 	"User name. The default is the user name of the invoking process.",
1020 	"user",
1021 	0,
1022 	OPT_HEADER,
1023 },
1024 {
1025 	"unblocked",
1026 	0,
1027 	OPT_unblocked,
1028 	"Force unblocked input/output. The default is format specific.\
1029 	Both input and output are unblocked if the value is omitted.",
1030 	"i|o",
1031 },
1032 {
1033 	"uncompressed|delta.size",
1034 	0,
1035 	OPT_uncompressed,
1036 	"The uncompressed size of the current archive entry, 0 if the\
1037 	entry is not compressed.",
1038 	"size",
1039 	0,
1040 	OPT_GLOBAL|OPT_READONLY|OPT_NUMBER|OPT_VENDOR,
1041 },
1042 {
1043 	"update",
1044 	'u',
1045 	OPT_update,
1046 	"Only copy archive members that are newer than the target files.\
1047 	Target file names are checked before \b--edit\b options are applied.",
1048 },
1049 {
1050 	"verbose",
1051 	'v',
1052 	OPT_verbose,
1053 	"Produce long listings or list each file name as it is processed.",
1054 },
1055 {
1056 	"verify",
1057 	'i',
1058 	OPT_verify,
1059 	"Prompt for verification and/or rename.",
1060 },
1061 {
1062 	"version",
1063 	0,
1064 	OPT_version,
1065 	"The header version string; empty if not supported.",
1066 	0,
1067 	0,
1068 	OPT_READONLY,
1069 },
1070 {
1071 	"warn",
1072 	'W',
1073 	OPT_warn,
1074 	"Enable archive format specific warnings.",
1075 },
1076 {
1077 	"write",
1078 	'w',
1079 	OPT_write,
1080 	"Write files to the archive.",
1081 },
1082 {
1083 	"yes",
1084 	'y',
1085 	OPT_yes,
1086 	"Prompt for yes/no file verification.",
1087 },
1088 { 0 }
1089 };
1090