1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 1996 Sun Microsystems, Inc. All Rights Reserved 24 * Copyright (c) 2016 by Delphix. All rights reserved. 25 * 26 * module: 27 * filesync.h 28 * 29 * purpose: 30 * general defines for use throughout the program 31 */ 32 33 #ifndef _FILESYNC_H 34 #define _FILESYNC_H 35 36 #pragma ident "%W% %E% SMI" 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 #include <sys/types.h> 43 44 /* 45 * arbitrary limits 46 */ 47 #define MAX_NAME 256 /* longest path component */ 48 #define MAX_PATH 1024 /* longest total path length */ 49 #define MAX_RLIST 32 /* max number of -r arguments */ 50 #define MAX_LINE 1024 /* longest input line */ 51 #define MAX_DEPTH 20 /* how deep to recurse */ 52 #define COPY_BSIZE 8192 /* block size for file copies */ 53 #define MIN_HOLE 1024 /* minimum hole in sparse file */ 54 #define HASH_SIZE 99 /* ignore list hash table */ 55 56 /* 57 * sanity check limits 58 */ 59 #define CONFIRM_MIN 4 /* min # deletetes to confirm */ 60 #define CONFIRM_PCT 25 /* min pctg of files to confirm */ 61 62 /* 63 * special types used in the program 64 */ 65 typedef enum { 66 FALSE = 0, 67 TRUE = 1, 68 MAYBE = 2 /* only partially true */ 69 } bool_t; 70 71 typedef enum { 72 OPT_BASE = 0, /* use the baseline data */ 73 OPT_SRC = 1, /* use the source side */ 74 OPT_DST = 2, /* use the destination side */ 75 OPT_OLD = 3, /* use the old one */ 76 OPT_NEW = 4 /* use the new one */ 77 } side_t; 78 79 /* 80 * values for debug mask 81 */ 82 typedef long dbgmask_t; /* type for debug masks */ 83 #define DBG_BASE 0x0001 /* baseline changes */ 84 #define DBG_RULE 0x0002 /* rule base changes */ 85 #define DBG_STAT 0x0004 /* file stats */ 86 #define DBG_ANAL 0x0008 /* analysis tracing */ 87 #define DBG_RECON 0x0010 /* reconciliation tracing */ 88 #define DBG_VARS 0x0020 /* variable tracing */ 89 #define DBG_FILES 0x0040 /* file reading/writing */ 90 #define DBG_LIST 0x0080 /* include list building */ 91 #define DBG_EVAL 0x0100 /* evaluation tracing */ 92 #define DBG_IGNORE 0x0200 /* ignore tracing */ 93 #define DBG_MISC 0x0400 /* catch-all everything else */ 94 95 /* 96 * values for error codes 97 */ 98 typedef int errmask_t; /* type for error masks */ 99 #define ERR_OK 0 /* everything is fine */ 100 #define ERR_RESOLVABLE 1 /* resolvable conflicts */ 101 #define ERR_UNRESOLVED 2 /* unresolvable conflicts */ 102 #define ERR_MISSING 4 /* some files missing */ 103 #define ERR_PERM 8 /* insufficient access */ 104 #define ERR_FILES 16 /* file format or I/O errors */ 105 #define ERR_INVAL 32 /* invalid arguments */ 106 #define ERR_NOBASE 64 /* inaccessable base directory */ 107 #define ERR_OTHER 128 /* anything else */ 108 109 /* errors that will prevent reconciliation from taking place */ 110 #define ERR_FATAL (ERR_FILES|ERR_INVAL|ERR_NOBASE|ERR_OTHER) 111 112 /* errors that will cause reconciliation to stop with -h specified */ 113 #define ERR_ABORT (ERR_FILES|ERR_PERM) 114 115 /* 116 * program defaults 117 */ 118 #define DFLT_PRFX "$HOME/" /* default location/pfx */ 119 #define SUFX_RULES ".packingrules" /* rules v1.1 location */ 120 #define SUFX_BASE ".filesync-base" /* baseline location */ 121 #define SUFX_OLD ".filesync-rules" /* rules v1.0 location */ 122 123 /* 124 * global variables for command line options 125 */ 126 extern bool_t opt_acls; /* enable acl checking/preservation */ 127 extern bool_t opt_mtime; /* preserve modification times */ 128 extern bool_t opt_notouch; /* don't actually make any changes */ 129 extern side_t opt_force; /* designated winner for conflicts */ 130 extern side_t opt_oneway; /* one way only propagation */ 131 extern side_t opt_onesided; /* permit one sided analysis */ 132 extern bool_t opt_everything; /* everything must agree (modes/uid/gid) */ 133 extern bool_t opt_quiet; /* stiffle reconciliaton descriptions */ 134 extern bool_t opt_verbose; /* generate analysis commentary */ 135 extern bool_t opt_errors; /* simulate errors on specified files */ 136 extern bool_t opt_halt; /* halt on any propagation error */ 137 extern dbgmask_t opt_debug; /* debugging options */ 138 139 /* 140 * information gained during startup that other people may need 141 */ 142 extern uid_t my_uid; /* User ID for files I create */ 143 extern gid_t my_gid; /* Group ID for files I create */ 144 145 /* error and warning routines */ 146 void confirm(char *); /* ask user if they're sure */ 147 void nomem(char *); /* die from malloc failure */ 148 149 /* routines for dealing with strings and file names */ 150 const char *prefix(const char *, const char *); /* does s1 begin with s2 */ 151 char *qualify(char *); /* validate and fully qualify */ 152 char *expand(char *); /* expand variables in name */ 153 char *lex(FILE *); /* lex off one token */ 154 extern int lex_linenum; /* current input file line number */ 155 const char *noblanks(const char *); /* escape strings for embedded blanks */ 156 bool_t wildcards(const char *); /* does name contain wildcards */ 157 bool_t suffix(const char *, const char *); /* does s1 end with s2 */ 158 bool_t contains(const char *, const char *); /* does s1 contain s2 */ 159 160 #ifdef __cplusplus 161 } 162 #endif 163 164 #endif /* _FILESYNC_H */ 165