Initial revision
[rsync/rsync.git] / rsync.h
CommitLineData
c627d613
AT
1/*
2 Copyright (C) Andrew Tridgell 1996
3 Copyright (C) Paul Mackerras 1996
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*/
19
20#define BLOCK_SIZE 700
21#define RSYNC_RSH_ENV "RSYNC_RSH"
22#define RSYNC_RSH "rsh"
23#define RSYNC_NAME "rsync"
24#define BACKUP_SUFFIX "~"
25
26/* update this if you make incompatible changes */
27#define PROTOCOL_VERSION 9
28
29/* block size to write files in */
30#define WRITE_BLOCK_SIZE (32*1024)
31
32#include "config.h"
33
34#include <sys/types.h>
35#ifdef HAVE_UNISTD_H
36#include <unistd.h>
37#endif
38#include <stdio.h>
39
40#ifdef HAVE_SYS_PARAM_H
41#include <sys/param.h>
42#endif
43
44#ifdef STDC_HEADERS
45# include <stdlib.h>
46# include <string.h>
47#endif
48
49#ifdef HAVE_COMPAT_H
50#include <compat.h>
51#endif
52
53#ifdef HAVE_MALLOC_H
54#include <malloc.h>
55#endif
56
57#ifdef TIME_WITH_SYS_TIME
58#include <sys/time.h>
59#include <time.h>
60#else
61#ifdef HAVE_SYS_TIME_H
62#include <sys/time.h>
63#else
64#include <time.h>
65#endif
66#endif
67
68#ifdef HAVE_FCNTL_H
69#include <fcntl.h>
70#else
71#ifdef HAVE_SYS_FCNTL_H
72#include <sys/fcntl.h>
73#endif
74#endif
75
76#include <sys/stat.h>
77
78#include <signal.h>
79#ifdef HAVE_SYS_WAIT_H
80#include <sys/wait.h>
81#endif
82#ifdef HAVE_CTYPE_H
83#include <ctype.h>
84#endif
85#ifdef HAVE_GRP_H
86#include <grp.h>
87#endif
88#include <errno.h>
89
90#include <sys/mman.h>
91#ifdef HAVE_UTIME_H
92#include <utime.h>
93#endif
94
95#ifdef HAVE_FNMATCH
96#include <fnmatch.h>
97#else
98#include "lib/fnmatch.h"
99#endif
100
101#ifdef HAVE_GETOPT_LONG
102#include <getopt.h>
103#else
104#include "lib/getopt.h"
105#endif
106
107
108#ifndef S_ISLNK
109#define S_ISLNK(mode) (((mode) & S_IFLNK) == S_IFLNK)
110#endif
111
112#ifndef uchar
113#define uchar unsigned char
114#endif
115
116#ifndef int32
117#if (SIZEOF_INT == 4)
118#define int32 int
119#elif (SIZEOF_LONG == 4)
120#define int32 long
121#elif (SIZEOF_SHORT == 4)
122#define int32 short
123#endif
124#endif
125
126#ifndef uint32
127#define uint32 unsigned int32
128#endif
129
130
131#ifndef MIN
132#define MIN(a,b) ((a)<(b)?(a):(b))
133#endif
134
135#ifndef MAX
136#define MAX(a,b) ((a)>(b)?(a):(b))
137#endif
138
139/* the length of the md4 checksum */
140#define SUM_LENGTH 16
141
142#ifndef MAXPATHLEN
143#define MAXPATHLEN 1024
144#endif
145
146struct file_struct {
147 time_t modtime;
148 off_t length;
149 mode_t mode;
150 dev_t dev;
151 uid_t uid;
152 gid_t gid;
153 char *name;
154 char *dir;
155 char *link;
156 char sum[SUM_LENGTH];
157};
158
159struct file_list {
160 int count;
161 int malloced;
162 struct file_struct *files;
163};
164
165struct sum_buf {
166 off_t offset; /* offset in file of this chunk */
167 int len; /* length of chunk of file */
168 int i; /* index of this chunk */
169 uint32 sum1; /* simple checksum */
170 char sum2[SUM_LENGTH]; /* md4 checksum */
171};
172
173struct sum_struct {
174 off_t flength; /* total file length */
175 int count; /* how many chunks */
176 int remainder; /* flength % block_length */
177 int n; /* block_length */
178 struct sum_buf *sums; /* points to info for each chunk */
179};
180
181
182#include "byteorder.h"
183#include "version.h"
184#include "proto.h"
185#include "md4.h"
186
187#if !HAVE_STRERROR
188extern char *sys_errlist[];
189#define strerror(i) sys_errlist[i]
190#endif
191
192#ifndef HAVE_STRCHR
193# define strchr index
194# define strrchr rindex
195#endif
196
197#if HAVE_DIRENT_H
198# include <dirent.h>
199#else
200# define dirent direct
201# if HAVE_SYS_NDIR_H
202# include <sys/ndir.h>
203# endif
204# if HAVE_SYS_DIR_H
205# include <sys/dir.h>
206# endif
207# if HAVE_NDIR_H
208# include <ndir.h>
209# endif
210#endif
211
212#ifndef HAVE_ERRNO_DECL
213extern int errno;
214#endif
215
216#ifndef HAVE_BCOPY
217#define bcopy(src,dest,n) memcpy(dest,src,n)
218#endif
219
220#ifndef HAVE_BZERO
221#define bzero(buf,n) memset(buf,0,n)
222#endif
223
224#define SUPPORT_LINKS (HAVE_READLINK && defined(S_ISLNK))
225
226#if !SUPPORT_LINKS
227#define lstat stat
228#endif