1 /* @(#)starsubs.h	1.144 20/07/19 Copyright 1996-2020 J. Schilling */
2 /*
3  *	Prototypes for star subroutines
4  *
5  *	Copyright (c) 1996-2020 J. Schilling
6  */
7 /*
8  * The contents of this file are subject to the terms of the
9  * Common Development and Distribution License, Version 1.0 only
10  * (the "License").  You may not use this file except in compliance
11  * with the License.
12  *
13  * See the file CDDL.Schily.txt in this distribution for details.
14  * A copy of the CDDL is also available via the Internet at
15  * http://www.opensource.org/licenses/cddl1.txt
16  *
17  * When distributing Covered Code, include this CDDL HEADER in each
18  * file and include the License file CDDL.Schily.txt from this distribution.
19  */
20 
21 #include <schily/ccomdefs.h>
22 
23 #ifndef	_SCHILY_UTYPES_H
24 #include <schily/utypes.h>
25 #endif
26 
27 #ifndef	_SCHILY_TYPES_H
28 #include <schily/types.h>
29 #endif
30 
31 /*
32  * star.c
33  */
34 extern	int	main		__PR((int ac, char **av));
35 extern	int	getnum		__PR((char *arg, long *valp));
36 extern	int	getbnum		__PR((char *arg, Llong *valp));
37 extern	int	getknum		__PR((char *arg, Llong *valp));
38 extern	void	set_signal	__PR((int sig, RETSIGTYPE (*handler)(int)));
39 extern	void	copy_create	__PR((int ac, char *const *av));
40 extern	void	star_verifyopts	__PR((void));
41 #ifdef	EOF
42 extern	BOOL	ttyerr		__PR((FILE *f));
43 #endif
44 
45 /*
46  * chdir.c
47  */
48 extern	char	*dogetwdir	__PR((BOOL doexit));
49 extern	BOOL	dochdir		__PR((const char *dir, BOOL doexit));
50 
51 /*
52  * match.c
53  */
54 extern	const char *filename	__PR((const char *name));
55 extern	BOOL	match		__PR((const char *name));
56 extern	int	addpattern	__PR((const char *pattern));
57 extern	int	addarg		__PR((const char *pattern));
58 extern	void	closepattern	__PR((void));
59 extern	void	prpatstats	__PR((void));
60 
61 /*
62  * buffer.c
63  */
64 extern	void	opt_remote	__PR((void));
65 extern	BOOL	openremote	__PR((void));
66 extern	void	opentape	__PR((void));
67 extern	void	closetape	__PR((void));
68 extern	void	changetape	__PR((BOOL donext));
69 extern	void	runnewvolscript	__PR((int volno, int nindex));
70 extern	void	nextitape	__PR((void));
71 extern	void	nextotape	__PR((void));
72 extern	long	startvol	__PR((char *buf, long amount));
73 extern	void	newvolhdr	__PR((char *buf, long amount, BOOL do_fifo));
74 extern	void	initbuf		__PR((int nblocks));
75 extern	void	markeof		__PR((void));
76 extern	void	marktcb		__PR((char *addr));
77 extern	void	syncbuf		__PR((void));
78 extern	long	peekblock	__PR((char *buf, long amount));
79 extern	long	readblock	__PR((char *buf, long amount));
80 extern	ssize_t	readtape	__PR((char *buf, size_t amount));
81 #ifdef _STAR_H
82 extern	void	filltcb		__PR((TCB *ptb));
83 extern	void	movetcb		__PR((TCB *from_ptb, TCB *to_ptb));
84 #endif
85 extern	void	*get_block	__PR((long amount));
86 extern	void	put_block	__PR((long amount));
87 extern	char	*writeblock	__PR((char *buf));
88 extern	ssize_t	writetape	__PR((char *buf, size_t amount));
89 extern	void	writeempty	__PR((void));
90 extern	void	weof		__PR((void));
91 extern	void	buf_sync	__PR((long size));
92 extern	void	buf_drain	__PR((void));
93 extern	long	buf_wait	__PR((long amount));
94 extern	void	buf_wake	__PR((long amount));
95 extern	long	buf_rwait	__PR((long amount));
96 extern	void	buf_rwake	__PR((long amount));
97 extern	void	buf_resume	__PR((void));
98 extern	void	backtape	__PR((void));
99 extern	int	mtioctl		__PR((int cmd, int count));
100 extern	off_t	mtseek		__PR((off_t offset, int whence));
101 extern	Llong	tblocks		__PR((void));
102 extern	void	prstats		__PR((void));
103 extern	BOOL	checkerrs	__PR((void));
104 extern	void	exprstats	__PR((int ret));
105 extern	void	excomerrno	__PR((int err,
106 					char *fmt, ...)) __printflike__(2, 3);
107 extern	void	excomerr	__PR((char *fmt, ...)) __printflike__(1, 2);
108 extern	void	die		__PR((int err));
109 
110 /*
111  * append.c
112  */
113 #ifdef _STAR_H
114 extern	void	skipall		__PR((void));
115 extern	BOOL	update_newer	__PR((FINFO *info));
116 #endif
117 
118 /*
119  * create.c
120  */
121 extern	void	checklinks	__PR((void));
122 extern	ssize_t	_fileread	__PR((int *fp, void *buf, size_t len));
123 extern	void	create		__PR((char *name, BOOL Hflag, BOOL forceadd));
124 #if	defined(_SCHILY_WALK_H)
125 extern	void	createlist	__PR((struct WALK *state));
126 #endif
127 #ifdef _STAR_H
128 extern	BOOL	read_symlink	__PR((char *sname, char *name,
129 					FINFO *info, TCB *ptb));
130 extern	BOOL	last_cpio_link	__PR((FINFO *info));
131 extern	BOOL	xcpio_link	__PR((FINFO *info));
132 extern	void	flushlinks	__PR((void));
133 extern	BOOL	read_link	__PR((char *name, int namlen, FINFO *info,
134 								TCB *ptb));
135 #ifdef	EOF
136 extern	void	put_file	__PR((int *fp, FINFO *info));
137 #endif
138 extern	void	cr_file		__PR((FINFO *info,
139 					ssize_t (*)(void *, char *, size_t),
140 					void *arg, long amt, char *text));
141 #endif
142 #if defined(_SCHILY_STAT_H) && defined(_SCHILY_WALK_H)
143 extern	int	walkfunc	__PR((char *nm, struct stat *fs,
144 					int type, struct WALK *state));
145 #endif
146 
147 /*
148  * diff.c
149  */
150 extern	void	diff		__PR((void));
151 #ifdef	EOF
152 extern	void	prdiffopts	__PR((FILE *f, char *label, int flags));
153 #endif
154 
155 /*
156  * restore.c
157  */
158 #ifdef _STAR_H
159 #ifdef _RESTORE_H
160 extern	imap_t	*padd_node	__PR((char *name, ino_t oino, ino_t nino,
161 					Int32_t flags));
162 extern	imap_t	*sym_addrec	__PR((FINFO *info));
163 extern	void	sym_addstat	__PR((FINFO *info, imap_t *imp));
164 extern	imap_t	*sym_dirprepare	__PR((FINFO *info, imap_t *idir));
165 extern	imap_t	*sym_typecheck	__PR((FINFO *info, FINFO *cinfo, imap_t *imp));
166 #endif
167 #endif
168 extern	void	sym_initmaps	__PR((void));
169 extern	void	sym_open	__PR((char *name));
170 #ifdef _STAR_H
171 extern	void	sym_init	__PR((GINFO *gp));
172 #endif
173 extern	void	sym_close	__PR((void));
174 #ifdef	EOF
175 extern	void	printLsym	__PR((FILE *f));
176 #endif
177 
178 /*
179  * dirtime.c
180  */
181 /* The prototype definitions have been moved into dirtime.h */
182 
183 /*
184  * extract.c
185  */
186 #ifdef _STAR_H
187 extern	void	extract		__PR((char *vhname));
188 #ifdef	_RESTORE_H
189 extern	BOOL	extracti	__PR((FINFO *info, imap_t *imp));
190 #endif
191 extern	BOOL	newer		__PR((FINFO *info, FINFO *cinfo));
192 extern	BOOL	same_symlink	__PR((FINFO *info));
193 extern	BOOL	same_special	__PR((FINFO *info));
194 extern	BOOL	create_dirs	__PR((char *name));
195 extern	BOOL	make_adir	__PR((FINFO *info));
196 extern	BOOL	void_file	__PR((FINFO *info));
197 extern	int	xt_file		__PR((FINFO *info,
198 					ssize_t (*)(void *, char *, size_t),
199 					void *arg, long amt, char *text));
200 extern	void	skip_slash	__PR((FINFO *info));
201 #endif
202 
203 /*
204  * fifo.c
205  */
206 #ifdef	FIFO
207 extern	void	initfifo	__PR((void));
208 extern	void	fifo_ibs_shrink	__PR((long newsize));
209 extern	void	runfifo		__PR((int ac, char *const *av));
210 extern	void	fifo_prmp	__PR((int sig));
211 extern	void	fifo_stats	__PR((void));
212 extern	size_t	fifo_amount	__PR((void));
213 extern	long	fifo_iwait	__PR((long amount));
214 extern	void	fifo_owake	__PR((long amount));
215 extern	void	fifo_oflush	__PR((void));
216 extern	void	fifo_oclose	__PR((void));
217 extern	long	fifo_owait	__PR((long amount));
218 extern	void	fifo_iwake	__PR((long amt));
219 extern	void	fifo_reelwake	__PR((void));
220 extern	void	fifo_resume	__PR((void));
221 extern	void	fifo_sync	__PR((long size));
222 extern	int	fifo_errno	__PR((void));
223 extern	void	fifo_onexit	__PR((int err, void *ignore));
224 extern	void	fifo_exit	__PR((int err));
225 extern	void	fifo_chitape	__PR((void));
226 extern	void	fifo_chotape	__PR((void));
227 #endif
228 
229 /*
230  * header.c
231  */
232 #ifdef _STAR_H
233 extern	BOOL	tarsum_ok	__PR((TCB *ptb));
234 #ifdef	EOF
235 extern	void	print_hdrtype	__PR((FILE *f, int type));
236 #endif
237 extern	char	*hdr_name	__PR((int type));
238 extern	char	*hdr_text	__PR((int type));
239 extern	int	hdr_type	__PR((char *name));
240 extern	void	hdr_usage	__PR((void));
241 extern	int	get_hdrtype	__PR((TCB *ptb, BOOL isrecurse));
242 extern	int	get_compression	__PR((TCB *ptb));
243 extern	char	*get_cmpname	__PR((int type));
244 extern	int	get_tcb		__PR((TCB *ptb));
245 extern	void	put_tcb		__PR((TCB *ptb, FINFO *info));
246 extern	void	write_tcb	__PR((TCB *ptb, FINFO *info));
247 extern	void	info_to_tcb	__PR((register FINFO *info, register TCB *ptb));
248 extern	int	tcb_to_info	__PR((register TCB *ptb, register FINFO *info));
249 extern	void	stolli		__PR((register char *s, Ullong *ull));
250 extern	void	llitos		__PR((char *s, Ullong ull, int fieldw));
251 extern	void	dump_info	__PR((FINFO *info));
252 #endif
253 
254 /*
255  * volhdr.c
256  */
257 #ifdef _STAR_H
258 extern	void	ginit		__PR((void));
259 extern	void	grinit		__PR((void));
260 extern	void	gipsetup	__PR((GINFO *gp));
261 extern	void	griprint	__PR((GINFO *gp));
262 extern	BOOL	verifyvol	__PR((char *buf, int amt, int volno,
263 					int *skipp));
264 extern	char	*dt_name	__PR((int type));
265 extern	int	dt_type		__PR((char *name));
266 extern	void	put_release	__PR((void));
267 extern	void	put_archtype	__PR((void));
268 extern	void	put_volhdr	__PR((char *name, BOOL putv));
269 extern	void	put_svolhdr	__PR((char *name));
270 extern	void	put_multhdr	__PR((off_t size, off_t off));
271 extern	BOOL	get_volhdr	__PR((FINFO *info, char *vhname));
272 #endif
273 
274 /*
275  * cpiohdr.c
276  */
277 #ifdef _STAR_H
278 extern	void	put_cpioh	__PR((TCB *ptb, FINFO *info));
279 extern	void	cpioinfo_to_tcb	__PR((FINFO *info, TCB *ptb));
280 extern	int	cpiotcb_to_info	__PR((TCB *ptb, FINFO *info));
281 extern	int	cpio_checkswab	__PR((TCB *ptb));
282 #endif
283 extern	void	cpio_weof	__PR((void));
284 extern	void	cpio_resync	__PR((void));
285 
286 /*
287  * xheader.c
288  */
289 #ifdef _STAR_H
290 extern	void	xbinit		__PR((void));
291 extern	void	xbbackup	__PR((void));
292 extern	void	xbrestore	__PR((void));
293 extern	size_t	xhsize		__PR((void));
294 extern	void	info_to_xhdr	__PR((FINFO *info, TCB *ptb));
295 extern	BOOL	xhparse		__PR((FINFO *info, char	*p, char *ep));
296 extern	void	xh_rangeerr	__PR((char *keyword, char *arg, size_t len));
297 extern	void	gen_xtime	__PR((char *keyword, time_t sec, Ulong nsec));
298 extern	void	gen_unumber	__PR((char *keyword, Ullong arg));
299 extern	void	gen_number	__PR((char *keyword, Llong arg));
300 extern	void	gen_text	__PR((char *keyword, char *arg, size_t alen,
301 								Uint flags));
302 
303 extern	void	tcb_to_xhdr_reset __PR((void));
304 extern	int	tcb_to_xhdr	__PR((TCB *ptb, FINFO *info));
305 
306 extern	BOOL	get_xtime	__PR((char *keyword, char *arg, size_t len,
307 						time_t *secp, long *nsecp));
308 #ifdef	__needed_
309 extern	BOOL	get_number	__PR((char *keyword, char *arg, Llong *llp));
310 #endif
311 extern	BOOL	get_unumber	__PR((char *keyword, char *arg, Ullong *ullp,
312 					Ullong maxval));
313 extern	BOOL	get_snumber	__PR((char *keyword, char *arg, Ullong *ullp,
314 					BOOL *negp,
315 					Ullong minval, Ullong maxval));
316 #endif
317 
318 /*
319  * xattr.c
320  */
321 #ifdef _STAR_H
322 extern	void	opt_xattr	__PR((void));
323 extern	void	opt_selinux	__PR((void));
324 extern	BOOL	get_xattr	__PR((register FINFO *info));
325 extern	BOOL	set_xattr	__PR((register FINFO *info));
326 #ifdef	USE_SELINUX
327 extern	BOOL	setselinux	__PR((register FINFO *info));
328 #endif
329 extern	void	free_xattr	__PR((star_xattr_t **xattr));
330 #endif
331 
332 /*
333  * hole.c
334  */
335 #ifdef _STAR_H
336 #ifdef	EOF
337 extern	int	get_forced_hole	__PR((FILE *f, FINFO *info));
338 extern	int	get_sparse	__PR((FILE *f, FINFO *info));
339 extern	int	get_as_hole	__PR((FILE *f, FINFO *info));
340 extern	BOOL	cmp_sparse	__PR((FILE *f, FINFO *info));
341 extern	void	put_sparse	__PR((int *fp, FINFO *info));
342 extern	BOOL	sparse_file	__PR((int *fp, FINFO *info));
343 #endif
344 extern	int	gnu_skip_extended	__PR((FINFO *info));
345 #endif
346 
347 /*
348  * lhash.c
349  */
350 extern	size_t	hash_size	__PR((size_t size));
351 #ifdef	EOF
352 extern	void	hash_build	__PR((FILE *fp));
353 extern	void	hash_xbuild	__PR((FILE *fp));
354 #endif
355 extern	BOOL	hash_lookup	__PR((char *str));
356 extern	BOOL	hash_xlookup	__PR((char *str));
357 
358 /*
359  * list.c
360  */
361 #ifdef _STAR_H
362 extern	void	list	__PR((void));
363 extern	void	list_file __PR((register FINFO *info));
364 extern	void	vprint	__PR((FINFO *info));
365 #endif
366 
367 /*
368  * longnames.c
369  */
370 #ifdef _STAR_H
371 extern	BOOL	name_to_tcb	__PR((FINFO *info, TCB *ptb));
372 extern	void	tcb_to_name	__PR((TCB *ptb, FINFO *info));
373 extern	void	tcb_undo_split	__PR((TCB *ptb, FINFO *info));
374 extern	int	tcb_to_longname	__PR((register TCB *ptb, register FINFO *info));
375 extern	void	write_longnames	__PR((register FINFO *info));
376 #endif
377 
378 /*
379  * props.c
380  */
381 extern	void	setprops	__PR((long htype));
382 extern	void	printprops	__PR((void));
383 
384 /*
385  * remove.c
386  */
387 extern	BOOL	remove_file	__PR((char *name, BOOL isfirst));
388 
389 /*
390  * star_unix.c
391  */
392 #ifdef _STAR_H
393 extern	BOOL	_getinfo	__PR((char *name, FINFO *info));
394 extern	BOOL	_lgetinfo	__PR((char *name, FINFO *info));
395 extern	BOOL	getinfo		__PR((char *name, FINFO *info));
396 #ifdef	HAVE_FSTATAT
397 extern	BOOL	getinfoat	__PR((int fd, char *name, FINFO *info));
398 #endif
399 #ifdef	_SCHILY_STAT_H
400 extern	BOOL	getstat		__PR((char *name, struct stat *sp));
401 extern	BOOL	stat_to_info	__PR((int fd, struct stat *sp, FINFO *info));
402 #endif
403 #ifdef	EOF
404 extern	void	checkarch	__PR((FILE *f));
405 extern	BOOL	samefile	__PR((FILE *fp1, FILE *fp2));
406 #endif
407 extern	BOOL	archisnull	__PR((const char *name));
408 extern	void	setmodes	__PR((FINFO *info));
409 extern	int	snulltimes	__PR((char *name, FINFO *info));
410 extern	int	sxsymlink	__PR((char *name, FINFO *info));
411 extern	int	rs_acctime	__PR((int fd, FINFO *info));
412 extern	void	setdirmodes	__PR((char *name, mode_t mode));
413 extern	mode_t	osmode		__PR((mode_t tarmode));
414 
415 /*
416  * lpath_unix.c
417  */
418 extern	int	lchdir		__PR((char *name));
419 extern	char	*lgetcwd	__PR((void));
420 extern	int	lmkdir		__PR((char *name, mode_t mode));
421 extern	int	laccess		__PR((char *name, int amode));
422 #ifdef	_SCHILY_STAT_H
423 extern	int	lstatat		__PR((char *name, struct stat *buf, int flag));
424 #endif
425 extern	int	lchmodat	__PR((char *name, mode_t mode, int flag));
426 #ifdef	_SCHILY_TIME_H
427 extern	int	lutimensat	__PR((char *name, struct timespec *ts,
428 					int flag));
429 #endif
430 extern	int	lreadlink	__PR((char *name, char *buf, size_t _bufsize));
431 extern	int	lsymlink	__PR((char *name, char *name2));
432 extern	int	llink		__PR((char *name, char *name2));
433 extern	int	lrename		__PR((char *name, char *name2));
434 extern	int	lmknod		__PR((char *name, mode_t mode, dev_t dev));
435 extern	int	lmkfifo		__PR((char *name, mode_t mode));
436 extern	int	lchownat	__PR((char *name, uid_t uid, gid_t gid,
437 					int flag));
438 extern	int	lunlinkat	__PR((char *name, int flag));
439 extern	char	*lmktemp	__PR((char *name));
440 #ifdef	EOF
441 extern	FILE	*lfilemopen	__PR((char *name, char *mode, mode_t cmode));
442 #endif
443 extern	int	_lfileopen	__PR((char *name, char *mode));
444 #ifdef	_SCHILY_DIRENT_H
445 EXPORT	DIR	*lopendir	__PR((char *name));
446 #endif
447 #endif	/* _STAR_H */
448 EXPORT	int	hop_dirs	__PR((char *name, char **np));
449 
450 /*
451  * acl_unix.c
452  */
453 extern	void	opt_acl		__PR((void));
454 #ifdef _STAR_H
455 extern	BOOL	get_acls	__PR((FINFO *info));
456 extern	void	set_acls	__PR((FINFO *info));
457 #endif
458 
459 /*
460  * unicode.c
461  */
462 extern	void	utf8_init	__PR((int type));
463 extern	void	utf8_fini	__PR((void));
464 extern	size_t	to_utf8		__PR((Uchar *to, size_t tolen,
465 					Uchar *from, size_t len));
466 extern	BOOL	from_utf8	__PR((Uchar *to, size_t tolen,
467 					Uchar *from, size_t *len));
468 
469 /*
470  * fflags.c
471  */
472 extern	void	opt_fflags	__PR((void));
473 #ifdef _STAR_H
474 extern	void	get_fflags	__PR((FINFO *info));
475 extern	void	set_fflags	__PR((FINFO *info));
476 extern	char	*textfromflags	__PR((FINFO *info, char *buf));
477 extern	int	texttoflags	__PR((FINFO *info, char *buf));
478 #endif
479 
480 /*
481  * defaults.c
482  */
483 extern	char	*get_stardefaults __PR((char *name));
484 extern	void	star_defaults	__PR((long *fsp, BOOL *no_fsyncp,
485 						BOOL *secure_linkp,
486 						char *dfltname));
487 extern	BOOL	star_darchive	__PR((char *arname, char *dfltname));
488 
489 /*
490  * subst.c
491  */
492 extern	int	paxpsubst	__PR((char *cmd, BOOL *arg));
493 extern	int	parsesubst	__PR((char *cmd, BOOL *arg));
494 #ifdef _STAR_H
495 extern	BOOL	subst		__PR((FINFO *info));
496 extern	BOOL	ia_change	__PR((TCB *ptb, FINFO *info));
497 #endif
498 
499 /*
500  * findinfo.c
501  */
502 #ifdef _STAR_H
503 EXPORT	BOOL	findinfo	__PR((FINFO *info));
504 #endif
505 
506 /*
507  * paxopts.c
508  */
509 extern	int	ppaxopts	__PR((const char *opts));
510