summaryrefslogtreecommitdiff
path: root/usr/src/cmd/filesync/filesync.h
blob: ce88af0f5ee8b28c3dbe34ac7916004942ec8579 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 1996 Sun Microsystems, Inc.  All Rights Reserved
 * Copyright (c) 2016 by Delphix. All rights reserved.
 *
 * module:
 *	filesync.h
 *
 * purpose:
 *	general defines for use throughout the program
 */

#ifndef	_FILESYNC_H
#define	_FILESYNC_H

#pragma ident	"%W%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

#include <sys/types.h>

/*
 * arbitrary limits
 */
#define	MAX_NAME	256		/* longest path component	*/
#define	MAX_PATH	1024		/* longest total path length	*/
#define	MAX_RLIST	32		/* max number of -r arguments	*/
#define	MAX_LINE	1024		/* longest input line		*/
#define	MAX_DEPTH	20		/* how deep to recurse		*/
#define	COPY_BSIZE	8192		/* block size for file copies	*/
#define	MIN_HOLE	1024		/* minimum hole in sparse file	*/
#define	HASH_SIZE	99		/* ignore list hash table	*/

/*
 * sanity check limits
 */
#define	CONFIRM_MIN	4		/* min # deletetes to confirm	*/
#define	CONFIRM_PCT	25		/* min pctg of files to confirm	*/

/*
 * special types used in the program
 */
typedef enum {
	FALSE = 0,
	TRUE  = 1,
	MAYBE = 2			/* only partially true		*/
} bool_t;

typedef enum {
	OPT_BASE = 0,			/* use the baseline data	*/
	OPT_SRC = 1,			/* use the source side		*/
	OPT_DST = 2,			/* use the destination side	*/
	OPT_OLD = 3,			/* use the old one		*/
	OPT_NEW = 4			/* use the new one		*/
} side_t;

/*
 * values for debug mask
 */
typedef	long dbgmask_t;			/* type for debug masks		*/
#define	DBG_BASE	0x0001		/* baseline changes		*/
#define	DBG_RULE	0x0002		/* rule base changes		*/
#define	DBG_STAT	0x0004		/* file stats			*/
#define	DBG_ANAL	0x0008		/* analysis tracing		*/
#define	DBG_RECON	0x0010		/* reconciliation tracing	*/
#define	DBG_VARS	0x0020		/* variable tracing		*/
#define	DBG_FILES	0x0040		/* file reading/writing		*/
#define	DBG_LIST	0x0080		/* include list building	*/
#define	DBG_EVAL	0x0100		/* evaluation tracing		*/
#define	DBG_IGNORE	0x0200		/* ignore tracing		*/
#define	DBG_MISC	0x0400		/* catch-all everything else	*/

/*
 * values for error codes
 */
typedef int errmask_t;			/* type for error masks		*/
#define	ERR_OK		0		/* everything is fine		*/
#define	ERR_RESOLVABLE	1		/* resolvable conflicts		*/
#define	ERR_UNRESOLVED	2		/* unresolvable conflicts	*/
#define	ERR_MISSING	4		/* some files missing		*/
#define	ERR_PERM	8		/* insufficient access		*/
#define	ERR_FILES	16		/* file format or I/O errors	*/
#define	ERR_INVAL	32		/* invalid arguments		*/
#define	ERR_NOBASE	64		/* inaccessable base directory	*/
#define	ERR_OTHER	128		/* anything else		*/

/* errors that will prevent reconciliation from taking place		*/
#define	ERR_FATAL	(ERR_FILES|ERR_INVAL|ERR_NOBASE|ERR_OTHER)

/* errors that will cause reconciliation to stop with -h specified	*/
#define	ERR_ABORT	(ERR_FILES|ERR_PERM)

/*
 * program defaults
 */
#define	DFLT_PRFX	"$HOME/"		/* default location/pfx	*/
#define	SUFX_RULES	".packingrules"		/* rules v1.1 location	*/
#define	SUFX_BASE	".filesync-base"	/* baseline location	*/
#define	SUFX_OLD	".filesync-rules"	/* rules v1.0 location	*/

/*
 * global variables for command line options
 */
extern bool_t  opt_acls;	/* enable acl checking/preservation	*/
extern bool_t  opt_mtime;	/* preserve modification times		*/
extern bool_t  opt_notouch;	/* don't actually make any changes	*/
extern side_t  opt_force;	/* designated winner for conflicts	*/
extern side_t  opt_oneway;	/* one way only propagation		*/
extern side_t  opt_onesided;	/* permit one sided analysis		*/
extern bool_t  opt_everything;	/* everything must agree (modes/uid/gid) */
extern bool_t  opt_quiet;	/* stiffle reconciliaton descriptions	*/
extern bool_t  opt_verbose;	/* generate analysis commentary		*/
extern bool_t  opt_errors;	/* simulate errors on specified files	*/
extern bool_t  opt_halt;	/* halt on any propagation error	*/
extern dbgmask_t opt_debug;	/* debugging options			*/

/*
 * information gained during startup that other people may need
 */
extern uid_t my_uid;	/* User ID for files I create			*/
extern gid_t my_gid;	/* Group ID for files I create			*/

/* error and warning routines						*/
void confirm(char *);		/* ask user if they're sure		*/
void nomem(char *);		/* die from malloc failure		*/

/* routines for dealing with strings and file names			*/
const char *prefix(const char *, const char *); /* does s1 begin with s2 */
char *qualify(char *);		/* validate and fully qualify		*/
char *expand(char *);		/* expand variables in name		*/
char *lex(FILE *);		/* lex off one token			*/
extern int lex_linenum;		/* current input file line number	*/
const char *noblanks(const char *);	/* escape strings for embedded blanks */
bool_t wildcards(const char *);	/* does name contain wildcards		*/
bool_t suffix(const char *, const char *);	/* does s1 end with s2	*/
bool_t contains(const char *, const char *);	/* does s1 contain s2	*/

#ifdef	__cplusplus
}
#endif

#endif	/* _FILESYNC_H */