Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added current_file_index.
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
21ab0eb
..
5126f28
100644
(file)
--- a/
generator.c
+++ b/
generator.c
@@
-46,8
+46,7
@@
extern int link_dest;
/* choose whether to skip a particular file */
/* choose whether to skip a particular file */
-static int skip_file(char *fname,
- struct file_struct *file, STRUCT_STAT *st)
+static int skip_file(char *fname, struct file_struct *file, STRUCT_STAT *st)
{
if (st->st_size != file->length) {
return 0;
{
if (st->st_size != file->length) {
return 0;
@@
-79,11
+78,8
@@
static int skip_file(char *fname,
}
}
file_checksum(fname,sum,st->st_size);
}
}
file_checksum(fname,sum,st->st_size);
- if (protocol_version < 21) {
- return (memcmp(sum,file->sum,2) == 0);
- } else {
- return (memcmp(sum,file->sum,MD4_SUM_LENGTH) == 0);
- }
+ return memcmp(sum, file->u.sum, protocol_version < 21 ? 2
+ : MD4_SUM_LENGTH) == 0;
}
if (size_only) {
}
if (size_only) {
@@
-266,13
+262,12
@@
static void generate_and_send_sums(struct map_struct *buf, size_t len, int f_out
* @note This comment was added later by mbp who was trying to work it
* out. It might be wrong.
**/
* @note This comment was added later by mbp who was trying to work it
* out. It might be wrong.
**/
-void recv_generator(char *fname, struct file_
list *flist
, int i, int f_out)
+void recv_generator(char *fname, struct file_
struct *file
, int i, int f_out)
{
int fd;
STRUCT_STAT st;
struct map_struct *mapbuf;
int statret;
{
int fd;
STRUCT_STAT st;
struct map_struct *mapbuf;
int statret;
- struct file_struct *file = flist->files[i];
char *fnamecmp;
char fnamecmpbuf[MAXPATHLEN];
extern char *compare_dest;
char *fnamecmp;
char fnamecmpbuf[MAXPATHLEN];
extern char *compare_dest;
@@
-280,7
+275,8
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
extern int only_existing;
extern int orig_umask;
extern int only_existing;
extern int orig_umask;
- if (list_only) return;
+ if (list_only)
+ return;
if (verbose > 2)
rprintf(FINFO,"recv_generator(%s,%d)\n",fname,i);
if (verbose > 2)
rprintf(FINFO,"recv_generator(%s,%d)\n",fname,i);
@@
-340,10
+336,10
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
int l;
extern int safe_symlinks;
int l;
extern int safe_symlinks;
- if (safe_symlinks && unsafe_symlink(file->link, fname)) {
+ if (safe_symlinks && unsafe_symlink(file->
u.
link, fname)) {
if (verbose) {
rprintf(FINFO, "ignoring unsafe symlink %s -> \"%s\"\n",
if (verbose) {
rprintf(FINFO, "ignoring unsafe symlink %s -> \"%s\"\n",
- full_fname(fname), file->link);
+ full_fname(fname), file->
u.
link);
}
return;
}
}
return;
}
@@
-354,7
+350,7
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
/* A link already pointing to the
* right place -- no further action
* required. */
/* A link already pointing to the
* right place -- no further action
* required. */
- if (strcmp(lnk,file->link) == 0) {
+ if (strcmp(lnk,file->
u.
link) == 0) {
set_perms(fname,file,&st,1);
return;
}
set_perms(fname,file,&st,1);
return;
}
@@
-364,13
+360,13
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
* in place. */
delete_file(fname);
}
* in place. */
delete_file(fname);
}
- if (do_symlink(file->link,fname) != 0) {
+ if (do_symlink(file->
u.
link,fname) != 0) {
rprintf(FERROR, "symlink %s -> \"%s\" failed: %s\n",
rprintf(FERROR, "symlink %s -> \"%s\" failed: %s\n",
- full_fname(fname), file->link, strerror(errno));
+ full_fname(fname), file->
u.
link, strerror(errno));
} else {
set_perms(fname,file,NULL,0);
if (verbose) {
} else {
set_perms(fname,file,NULL,0);
if (verbose) {
- rprintf(FINFO,"%s -> %s\n", fname,file->link);
+ rprintf(FINFO,"%s -> %s\n", fname,file->
u.
link);
}
}
#endif
}
}
#endif
@@
-381,12
+377,12
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
if (am_root && preserve_devices && IS_DEVICE(file->mode)) {
if (statret != 0 ||
st.st_mode != file->mode ||
if (am_root && preserve_devices && IS_DEVICE(file->mode)) {
if (statret != 0 ||
st.st_mode != file->mode ||
- (DEV64_T)st.st_rdev != file->rdev) {
+ (DEV64_T)st.st_rdev != file->
u.
rdev) {
delete_file(fname);
if (verbose > 2)
rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",
delete_file(fname);
if (verbose > 2)
rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",
- fname,(int)file->mode,(int)file->rdev);
- if (do_mknod(fname,file->mode,file->rdev) != 0) {
+ fname,(int)file->mode,(int)file->
u.
rdev);
+ if (do_mknod(fname,file->mode,file->
u.
rdev) != 0) {
rprintf(FERROR, "mknod %s failed: %s\n",
full_fname(fname), strerror(errno));
} else {
rprintf(FERROR, "mknod %s failed: %s\n",
full_fname(fname), strerror(errno));
} else {
@@
-401,7
+397,7
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
}
#endif
}
#endif
- if (preserve_hard_links &&
check_hard_link(file)
) {
+ if (preserve_hard_links &&
file->link_u.links && file->F_HEAD != file
) {
if (verbose > 1) {
rprintf(FINFO, "recv_generator: \"%s\" is a hard link\n",
f_name(file));
if (verbose > 1) {
rprintf(FINFO, "recv_generator: \"%s\" is a hard link\n",
f_name(file));
@@
-510,8
+506,10
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
else
mapbuf = NULL;
else
mapbuf = NULL;
- if (verbose > 3)
- rprintf(FINFO,"gen mapped %s of size %.0f\n",fnamecmp,(double)st.st_size);
+ if (verbose > 3) {
+ rprintf(FINFO,"gen mapped %s of size %.0f\n", fnamecmp,
+ (double)st.st_size);
+ }
if (verbose > 2)
rprintf(FINFO, "generating and sending sums for %d\n", i);
if (verbose > 2)
rprintf(FINFO, "generating and sending sums for %d\n", i);
@@
-524,7
+522,6
@@
void recv_generator(char *fname, struct file_list *flist, int i, int f_out)
}
}
-
void generate_files(int f,struct file_list *flist,char *local_name,int f_recv)
{
int i;
void generate_files(int f,struct file_list *flist,char *local_name,int f_recv)
{
int i;
@@
-549,22
+546,23
@@
void generate_files(int f,struct file_list *flist,char *local_name,int f_recv)
for (i = 0; i < flist->count; i++) {
struct file_struct *file = flist->files[i];
for (i = 0; i < flist->count; i++) {
struct file_struct *file = flist->files[i];
- mode_t saved_mode = file->mode;
- if (!file->basename) continue;
+ struct file_struct copy;
+ if (!file->basename)
+ continue;
/* we need to ensure that any directories we create have writeable
permissions initially so that we can create the files within
them. This is then fixed after the files are transferred */
/* we need to ensure that any directories we create have writeable
permissions initially so that we can create the files within
them. This is then fixed after the files are transferred */
- if (!am_root && S_ISDIR(file->mode)) {
- file->mode |= S_IWUSR; /* user write */
+ if (!am_root && S_ISDIR(file->mode)
&& !(file->mode & S_IWUSR)
) {
+ copy = *file;
/* XXX: Could this be causing a problem on SCO? Perhaps their
* handling of permissions is strange? */
/* XXX: Could this be causing a problem on SCO? Perhaps their
* handling of permissions is strange? */
+ copy.mode |= S_IWUSR; /* user write */
+ file = ©
}
recv_generator(local_name? local_name
}
recv_generator(local_name? local_name
- : f_name_to(file,fbuf,sizeof fbuf), flist, i, f);
-
- file->mode = saved_mode;
+ : f_name_to(file,fbuf,sizeof fbuf), file, i, f);
}
phase++;
}
phase++;
@@
-578,10
+576,10
@@
void generate_files(int f,struct file_list *flist,char *local_name,int f_recv)
/* files can cycle through the system more than once
* to catch initial checksum errors */
/* files can cycle through the system more than once
* to catch initial checksum errors */
-
for (i = read_int(f_recv); i != -1; i = read_int(f_recv)
) {
+
while ((i = read_int(f_recv)) != -1
) {
struct file_struct *file = flist->files[i];
recv_generator(local_name? local_name
struct file_struct *file = flist->files[i];
recv_generator(local_name? local_name
- : f_name_to(file,fbuf,sizeof fbuf), f
list
, i, f);
+ : f_name_to(file,fbuf,sizeof fbuf), f
ile
, i, f);
}
phase++;
}
phase++;