Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liblongpath-rsync
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liblongpath
liblongpath-rsync
Commits
a800434a
Commit
a800434a
authored
Jun 01, 1998
by
Andrew Tridgell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added --stats option for verbose stats on the file transfer
parent
3b3c3d43
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
312 additions
and
239 deletions
+312
-239
flist.c
flist.c
+15
-3
io.c
io.c
+4
-20
main.c
main.c
+41
-17
match.c
match.c
+9
-6
options.c
options.c
+9
-2
rsync.c
rsync.c
+219
-188
rsync.h
rsync.h
+15
-3
No files found.
flist.c
View file @
a800434a
...
@@ -21,12 +21,13 @@
...
@@ -21,12 +21,13 @@
#include "rsync.h"
#include "rsync.h"
extern
struct
stats
stats
;
extern
int
csum_length
;
extern
int
csum_length
;
extern
int
verbose
;
extern
int
verbose
;
extern
int
am_server
;
extern
int
am_server
;
extern
int
always_checksum
;
extern
int
always_checksum
;
extern
int64
total_size
;
extern
int
cvs_exclude
;
extern
int
cvs_exclude
;
...
@@ -421,7 +422,7 @@ static struct file_struct *make_file(char *fname)
...
@@ -421,7 +422,7 @@ static struct file_struct *make_file(char *fname)
}
}
if
(
!
S_ISDIR
(
st
.
st_mode
))
if
(
!
S_ISDIR
(
st
.
st_mode
))
total_size
+=
st
.
st_size
;
stats
.
total_size
+=
st
.
st_size
;
return
file
;
return
file
;
}
}
...
@@ -525,12 +526,15 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
...
@@ -525,12 +526,15 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
char
*
p
,
*
dir
;
char
*
p
,
*
dir
;
char
lastpath
[
MAXPATHLEN
]
=
""
;
char
lastpath
[
MAXPATHLEN
]
=
""
;
struct
file_list
*
flist
;
struct
file_list
*
flist
;
int64
start_write
;
if
(
verbose
&&
recurse
&&
!
am_server
&&
f
!=
-
1
)
{
if
(
verbose
&&
recurse
&&
!
am_server
&&
f
!=
-
1
)
{
rprintf
(
FINFO
,
"building file list ... "
);
rprintf
(
FINFO
,
"building file list ... "
);
rflush
(
FINFO
);
rflush
(
FINFO
);
}
}
start_write
=
stats
.
total_written
;
flist
=
(
struct
file_list
*
)
malloc
(
sizeof
(
flist
[
0
]));
flist
=
(
struct
file_list
*
)
malloc
(
sizeof
(
flist
[
0
]));
if
(
!
flist
)
out_of_memory
(
"send_file_list"
);
if
(
!
flist
)
out_of_memory
(
"send_file_list"
);
...
@@ -651,6 +655,8 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
...
@@ -651,6 +655,8 @@ struct file_list *send_file_list(int f,int argc,char *argv[])
if
(
f
!=
-
1
)
{
if
(
f
!=
-
1
)
{
io_end_buffering
(
f
);
io_end_buffering
(
f
);
stats
.
flist_size
=
stats
.
total_written
-
start_write
;
stats
.
num_files
=
flist
->
count
;
}
}
if
(
verbose
>
2
)
if
(
verbose
>
2
)
...
@@ -664,12 +670,15 @@ struct file_list *recv_file_list(int f)
...
@@ -664,12 +670,15 @@ struct file_list *recv_file_list(int f)
{
{
struct
file_list
*
flist
;
struct
file_list
*
flist
;
unsigned
char
flags
;
unsigned
char
flags
;
int64
start_read
;
if
(
verbose
&&
recurse
&&
!
am_server
)
{
if
(
verbose
&&
recurse
&&
!
am_server
)
{
rprintf
(
FINFO
,
"receiving file list ... "
);
rprintf
(
FINFO
,
"receiving file list ... "
);
rflush
(
FINFO
);
rflush
(
FINFO
);
}
}
start_read
=
stats
.
total_read
;
flist
=
(
struct
file_list
*
)
malloc
(
sizeof
(
flist
[
0
]));
flist
=
(
struct
file_list
*
)
malloc
(
sizeof
(
flist
[
0
]));
if
(
!
flist
)
if
(
!
flist
)
goto
oom
;
goto
oom
;
...
@@ -700,7 +709,7 @@ struct file_list *recv_file_list(int f)
...
@@ -700,7 +709,7 @@ struct file_list *recv_file_list(int f)
receive_file_entry
(
&
flist
->
files
[
i
],
flags
,
f
);
receive_file_entry
(
&
flist
->
files
[
i
],
flags
,
f
);
if
(
S_ISREG
(
flist
->
files
[
i
]
->
mode
))
if
(
S_ISREG
(
flist
->
files
[
i
]
->
mode
))
total_size
+=
flist
->
files
[
i
]
->
length
;
stats
.
total_size
+=
flist
->
files
[
i
]
->
length
;
flist
->
count
++
;
flist
->
count
++
;
...
@@ -731,6 +740,9 @@ struct file_list *recv_file_list(int f)
...
@@ -731,6 +740,9 @@ struct file_list *recv_file_list(int f)
if
(
verbose
>
2
)
if
(
verbose
>
2
)
rprintf
(
FINFO
,
"recv_file_list done
\n
"
);
rprintf
(
FINFO
,
"recv_file_list done
\n
"
);
stats
.
flist_size
=
stats
.
total_read
-
start_read
;
stats
.
num_files
=
flist
->
count
;
return
flist
;
return
flist
;
oom:
oom:
...
...
io.c
View file @
a800434a
...
@@ -24,9 +24,6 @@
...
@@ -24,9 +24,6 @@
*/
*/
#include "rsync.h"
#include "rsync.h"
static
int64
total_written
;
static
int64
total_read
;
static
int
io_multiplexing_out
;
static
int
io_multiplexing_out
;
static
int
io_multiplexing_in
;
static
int
io_multiplexing_in
;
static
int
multiplex_in_fd
;
static
int
multiplex_in_fd
;
...
@@ -35,17 +32,7 @@ static time_t last_io;
...
@@ -35,17 +32,7 @@ static time_t last_io;
static
int
eof_error
=
1
;
static
int
eof_error
=
1
;
extern
int
verbose
;
extern
int
verbose
;
extern
int
io_timeout
;
extern
int
io_timeout
;
extern
struct
stats
stats
;
int64
write_total
(
void
)
{
return
total_written
;
}
int64
read_total
(
void
)
{
return
total_read
;
}
static
int
buffer_f_in
=
-
1
;
static
int
buffer_f_in
=
-
1
;
...
@@ -108,6 +95,7 @@ static int read_timeout(int fd, char *buf, int len)
...
@@ -108,6 +95,7 @@ static int read_timeout(int fd, char *buf, int len)
n
=
read
(
fd
,
buf
,
len
);
n
=
read
(
fd
,
buf
,
len
);
if
(
n
>
0
)
{
if
(
n
>
0
)
{
stats
.
total_read
+=
n
;
buf
+=
n
;
buf
+=
n
;
len
-=
n
;
len
-=
n
;
ret
+=
n
;
ret
+=
n
;
...
@@ -267,7 +255,6 @@ int32 read_int(int f)
...
@@ -267,7 +255,6 @@ int32 read_int(int f)
{
{
char
b
[
4
];
char
b
[
4
];
readfd
(
f
,
b
,
4
);
readfd
(
f
,
b
,
4
);
total_read
+=
4
;
return
IVAL
(
b
,
0
);
return
IVAL
(
b
,
0
);
}
}
...
@@ -286,7 +273,6 @@ int64 read_longint(int f)
...
@@ -286,7 +273,6 @@ int64 read_longint(int f)
#else
#else
if
(
remote_version
>=
16
)
{
if
(
remote_version
>=
16
)
{
readfd
(
f
,
b
,
8
);
readfd
(
f
,
b
,
8
);
total_read
+=
8
;
ret
=
IVAL
(
b
,
0
)
|
(((
int64
)
IVAL
(
b
,
4
))
<<
32
);
ret
=
IVAL
(
b
,
0
)
|
(((
int64
)
IVAL
(
b
,
4
))
<<
32
);
}
}
#endif
#endif
...
@@ -297,7 +283,6 @@ int64 read_longint(int f)
...
@@ -297,7 +283,6 @@ int64 read_longint(int f)
void
read_buf
(
int
f
,
char
*
buf
,
int
len
)
void
read_buf
(
int
f
,
char
*
buf
,
int
len
)
{
{
readfd
(
f
,
buf
,
len
);
readfd
(
f
,
buf
,
len
);
total_read
+=
len
;
}
}
void
read_sbuf
(
int
f
,
char
*
buf
,
int
len
)
void
read_sbuf
(
int
f
,
char
*
buf
,
int
len
)
...
@@ -368,6 +353,8 @@ static void writefd_unbuffered(int fd,char *buf,int len)
...
@@ -368,6 +353,8 @@ static void writefd_unbuffered(int fd,char *buf,int len)
}
}
total
+=
ret
;
total
+=
ret
;
stats
.
total_written
+=
ret
;
if
(
io_timeout
)
if
(
io_timeout
)
last_io
=
time
(
NULL
);
last_io
=
time
(
NULL
);
continue
;
continue
;
...
@@ -446,7 +433,6 @@ void write_int(int f,int32 x)
...
@@ -446,7 +433,6 @@ void write_int(int f,int32 x)
char
b
[
4
];
char
b
[
4
];
SIVAL
(
b
,
0
,
x
);
SIVAL
(
b
,
0
,
x
);
writefd
(
f
,
b
,
4
);
writefd
(
f
,
b
,
4
);
total_written
+=
4
;
}
}
void
write_longint
(
int
f
,
int64
x
)
void
write_longint
(
int
f
,
int64
x
)
...
@@ -464,13 +450,11 @@ void write_longint(int f, int64 x)
...
@@ -464,13 +450,11 @@ void write_longint(int f, int64 x)
SIVAL
(
b
,
4
,((
x
>>
32
)
&
0xFFFFFFFF
));
SIVAL
(
b
,
4
,((
x
>>
32
)
&
0xFFFFFFFF
));
writefd
(
f
,
b
,
8
);
writefd
(
f
,
b
,
8
);
total_written
+=
8
;
}
}
void
write_buf
(
int
f
,
char
*
buf
,
int
len
)
void
write_buf
(
int
f
,
char
*
buf
,
int
len
)
{
{
writefd
(
f
,
buf
,
len
);
writefd
(
f
,
buf
,
len
);
total_written
+=
len
;
}
}
/* write a string to the connection */
/* write a string to the connection */
...
...
main.c
View file @
a800434a
...
@@ -20,7 +20,8 @@
...
@@ -20,7 +20,8 @@
#include "rsync.h"
#include "rsync.h"
time_t
starttime
=
0
;
time_t
starttime
=
0
;
int64
total_size
=
0
;
struct
stats
stats
;
extern
int
csum_length
;
extern
int
csum_length
;
...
@@ -28,16 +29,17 @@ extern int verbose;
...
@@ -28,16 +29,17 @@ extern int verbose;
static
void
report
(
int
f
)
static
void
report
(
int
f
)
{
{
int64
in
,
out
,
tsize
;
time_t
t
=
time
(
NULL
);
time_t
t
=
time
(
NULL
);
extern
int
am_server
;
extern
int
am_server
;
extern
int
am_sender
;
extern
int
am_sender
;
extern
int
am_daemon
;
extern
int
am_daemon
;
extern
int
do_stats
;
if
(
am_daemon
)
{
if
(
am_daemon
)
{
syslog
(
LOG_INFO
,
"wrote %.0f bytes read %.0f bytes total size %.0f
\n
"
,
syslog
(
LOG_INFO
,
"wrote %.0f bytes read %.0f bytes total size %.0f
\n
"
,
(
double
)
write_total
(),(
double
)
read_total
(),
(
double
)
stats
.
total_written
,
(
double
)
total_size
);
(
double
)
stats
.
total_read
,
(
double
)
stats
.
total_size
);
if
(
f
==
-
1
||
!
am_sender
)
return
;
if
(
f
==
-
1
||
!
am_sender
)
return
;
}
}
...
@@ -46,26 +48,46 @@ static void report(int f)
...
@@ -46,26 +48,46 @@ static void report(int f)
if
(
am_server
&&
!
am_sender
)
return
;
if
(
am_server
&&
!
am_sender
)
return
;
if
(
am_server
&&
am_sender
)
{
if
(
am_server
&&
am_sender
)
{
write_longint
(
f
,
read_total
()
);
write_longint
(
f
,
stats
.
total_read
);
write_longint
(
f
,
write_total
()
);
write_longint
(
f
,
stats
.
total_written
);
write_longint
(
f
,
total_size
);
write_longint
(
f
,
stats
.
total_size
);
return
;
return
;
}
}
if
(
am_sender
)
{
if
(
!
am_sender
)
{
in
=
read_total
();
int64
r
;
out
=
write_total
();
stats
.
total_written
=
read_longint
(
f
);
tsize
=
total_size
;
r
=
read_longint
(
f
);
}
else
{
stats
.
total_size
=
read_longint
(
f
);
out
=
read_longint
(
f
);
stats
.
total_read
=
r
;
in
=
read_longint
(
f
);
}
tsize
=
read_longint
(
f
);
if
(
do_stats
)
{
printf
(
"
\n
Number of files: %d
\n
"
,
stats
.
num_files
);
printf
(
"Number of files transferred: %d
\n
"
,
stats
.
num_transferred_files
);
printf
(
"Total file size: %.0f bytes
\n
"
,
(
double
)
stats
.
total_size
);
printf
(
"Total transferred file size: %.0f bytes
\n
"
,
(
double
)
stats
.
total_transferred_size
);
printf
(
"Literal data: %.0f bytes
\n
"
,
(
double
)
stats
.
literal_data
);
printf
(
"Matched data: %.0f bytes
\n
"
,
(
double
)
stats
.
matched_data
);
printf
(
"File list size: %d
\n
"
,
stats
.
flist_size
);
printf
(
"Total bytes written: %.0f
\n
"
,
(
double
)
stats
.
total_written
);
printf
(
"Total bytes read: %.0f
\n\n
"
,
(
double
)
stats
.
total_read
);
}
}
printf
(
"wrote %.0f bytes read %.0f bytes %.2f bytes/sec
\n
"
,
printf
(
"wrote %.0f bytes read %.0f bytes %.2f bytes/sec
\n
"
,
(
double
)
out
,(
double
)
in
,(
in
+
out
)
/
(
0
.
5
+
(
t
-
starttime
)));
(
double
)
stats
.
total_written
,
(
double
)
stats
.
total_read
,
(
stats
.
total_written
+
stats
.
total_read
)
/
(
0
.
5
+
(
t
-
starttime
)));
printf
(
"total size is %.0f speedup is %.2f
\n
"
,
printf
(
"total size is %.0f speedup is %.2f
\n
"
,
(
double
)
tsize
,(
1
.
0
*
tsize
)
/
(
in
+
out
));
(
double
)
stats
.
total_size
,
(
1
.
0
*
stats
.
total_size
)
/
(
stats
.
total_written
+
stats
.
total_read
));
}
}
...
@@ -498,6 +520,8 @@ int main(int argc,char *argv[])
...
@@ -498,6 +520,8 @@ int main(int argc,char *argv[])
starttime
=
time
(
NULL
);
starttime
=
time
(
NULL
);
am_root
=
(
getuid
()
==
0
);
am_root
=
(
getuid
()
==
0
);
memset
(
&
stats
,
0
,
sizeof
(
stats
));
if
(
argc
<
2
)
{
if
(
argc
<
2
)
{
usage
(
FERROR
);
usage
(
FERROR
);
exit_cleanup
(
1
);
exit_cleanup
(
1
);
...
...
match.c
View file @
a800434a
...
@@ -34,13 +34,13 @@ typedef unsigned short tag;
...
@@ -34,13 +34,13 @@ typedef unsigned short tag;
static
int
false_alarms
;
static
int
false_alarms
;
static
int
tag_hits
;
static
int
tag_hits
;
static
int
matches
;
static
int
matches
;
static
int
data_transfer
;
static
int
64
data_transfer
;
static
int
total_false_alarms
;
static
int
total_false_alarms
;
static
int
total_tag_hits
;
static
int
total_tag_hits
;
static
int
total_matches
;
static
int
total_matches
;
static
int64
total_data_transfer
;
extern
struct
stats
stats
;
struct
target
{
struct
target
{
tag
t
;
tag
t
;
...
@@ -103,8 +103,10 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf,
...
@@ -103,8 +103,10 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf,
send_token
(
f
,
i
,
buf
,
last_match
,
n
,
i
<
0
?
0
:
s
->
sums
[
i
].
len
);
send_token
(
f
,
i
,
buf
,
last_match
,
n
,
i
<
0
?
0
:
s
->
sums
[
i
].
len
);
data_transfer
+=
n
;
data_transfer
+=
n
;
if
(
i
>=
0
)
if
(
i
>=
0
)
{
stats
.
matched_data
+=
s
->
sums
[
i
].
len
;
n
+=
s
->
sums
[
i
].
len
;
n
+=
s
->
sums
[
i
].
len
;
}
for
(
j
=
0
;
j
<
n
;
j
+=
CHUNK_SIZE
)
{
for
(
j
=
0
;
j
<
n
;
j
+=
CHUNK_SIZE
)
{
int
n1
=
MIN
(
CHUNK_SIZE
,
n
-
j
);
int
n1
=
MIN
(
CHUNK_SIZE
,
n
-
j
);
...
@@ -273,7 +275,7 @@ void match_sums(int f,struct sum_struct *s,struct map_struct *buf,OFF_T len)
...
@@ -273,7 +275,7 @@ void match_sums(int f,struct sum_struct *s,struct map_struct *buf,OFF_T len)
total_tag_hits
+=
tag_hits
;
total_tag_hits
+=
tag_hits
;
total_false_alarms
+=
false_alarms
;
total_false_alarms
+=
false_alarms
;
total_matches
+=
matches
;
total_matches
+=
matches
;
total_data_transfer
+=
data_transfer
;
stats
.
literal_data
+=
data_transfer
;
}
}
void
match_report
(
void
)
void
match_report
(
void
)
...
@@ -282,7 +284,8 @@ void match_report(void)
...
@@ -282,7 +284,8 @@ void match_report(void)
return
;
return
;
rprintf
(
FINFO
,
rprintf
(
FINFO
,
"total: matches=%d tag_hits=%d false_alarms=%d
data=%ld
\n
"
,
"total: matches=%d tag_hits=%d false_alarms=%d
data=%.0f
\n
"
,
total_matches
,
total_tag_hits
,
total_matches
,
total_tag_hits
,
total_false_alarms
,(
long
)
total_data_transfer
);
total_false_alarms
,
(
double
)
stats
.
literal_data
);
}
}
options.c
View file @
a800434a
...
@@ -55,6 +55,7 @@ int am_sender=0;
...
@@ -55,6 +55,7 @@ int am_sender=0;
int
recurse
=
0
;
int
recurse
=
0
;
int
am_daemon
=
0
;
int
am_daemon
=
0
;
int
am_client
=
0
;
int
am_client
=
0
;
int
do_stats
=
0
;
int
block_size
=
BLOCK_SIZE
;
int
block_size
=
BLOCK_SIZE
;
...
@@ -115,7 +116,8 @@ void usage(int F)
...
@@ -115,7 +116,8 @@ void usage(int F)
rprintf
(
F
,
" --version print version number
\n
"
);
rprintf
(
F
,
" --version print version number
\n
"
);
rprintf
(
F
,
" --daemon run as a rsync daemon
\n
"
);
rprintf
(
F
,
" --daemon run as a rsync daemon
\n
"
);
rprintf
(
F
,
" --config FILE specify alternate rsyncd.conf file
\n
"
);
rprintf
(
F
,
" --config FILE specify alternate rsyncd.conf file
\n
"
);
rprintf
(
F
,
" --port PORT specify alternate rsyncd port number
\n
"
);
rprintf
(
F
,
" --port PORT specify alternate rsyncd port number
\n
"
);
rprintf
(
F
,
" --stats give some file transfer stats
\n
"
);
rprintf
(
F
,
"
\n
"
);
rprintf
(
F
,
"
\n
"
);
rprintf
(
F
,
"the backup suffix defaults to %s
\n
"
,
BACKUP_SUFFIX
);
rprintf
(
F
,
"the backup suffix defaults to %s
\n
"
,
BACKUP_SUFFIX
);
...
@@ -125,7 +127,7 @@ void usage(int F)
...
@@ -125,7 +127,7 @@ void usage(int F)
enum
{
OPT_VERSION
,
OPT_SUFFIX
,
OPT_SENDER
,
OPT_SERVER
,
OPT_EXCLUDE
,
enum
{
OPT_VERSION
,
OPT_SUFFIX
,
OPT_SENDER
,
OPT_SERVER
,
OPT_EXCLUDE
,
OPT_EXCLUDE_FROM
,
OPT_DELETE
,
OPT_NUMERIC_IDS
,
OPT_RSYNC_PATH
,
OPT_EXCLUDE_FROM
,
OPT_DELETE
,
OPT_NUMERIC_IDS
,
OPT_RSYNC_PATH
,
OPT_FORCE
,
OPT_TIMEOUT
,
OPT_DAEMON
,
OPT_CONFIG
,
OPT_PORT
,
OPT_FORCE
,
OPT_TIMEOUT
,
OPT_DAEMON
,
OPT_CONFIG
,
OPT_PORT
,
OPT_INCLUDE
,
OPT_INCLUDE_FROM
};
OPT_INCLUDE
,
OPT_INCLUDE_FROM
,
OPT_STATS
};
static
char
*
short_options
=
"oblLWHpguDCtcahvrRIxnSe:B:T:z"
;
static
char
*
short_options
=
"oblLWHpguDCtcahvrRIxnSe:B:T:z"
;
...
@@ -170,6 +172,7 @@ static struct option long_options[] = {
...
@@ -170,6 +172,7 @@ static struct option long_options[] = {
{
"temp-dir"
,
1
,
0
,
'T'
},
{
"temp-dir"
,
1
,
0
,
'T'
},
{
"compress"
,
0
,
0
,
'z'
},
{
"compress"
,
0
,
0
,
'z'
},
{
"daemon"
,
0
,
0
,
OPT_DAEMON
},
{
"daemon"
,
0
,
0
,
OPT_DAEMON
},
{
"stats"
,
0
,
0
,
OPT_STATS
},
{
"config"
,
1
,
0
,
OPT_CONFIG
},
{
"config"
,
1
,
0
,
OPT_CONFIG
},
{
"port"
,
1
,
0
,
OPT_PORT
},
{
"port"
,
1
,
0
,
OPT_PORT
},
{
0
,
0
,
0
,
0
}};
{
0
,
0
,
0
,
0
}};
...
@@ -364,6 +367,10 @@ void parse_arguments(int argc, char *argv[])
...
@@ -364,6 +367,10 @@ void parse_arguments(int argc, char *argv[])
am_daemon
=
1
;
am_daemon
=
1
;
break
;
break
;
case
OPT_STATS
:
do_stats
=
1
;
break
;
case
OPT_CONFIG
:
case
OPT_CONFIG
:
config_file
=
optarg
;
config_file
=
optarg
;
break
;
break
;
...
...
rsync.c
View file @
a800434a
This diff is collapsed.
Click to expand it.
rsync.h
View file @
a800434a
...
@@ -280,9 +280,9 @@ struct file_struct {
...
@@ -280,9 +280,9 @@ struct file_struct {
};
};
struct
file_list
{
struct
file_list
{
int
count
;
int
count
;
int
malloced
;
int
malloced
;
struct
file_struct
**
files
;
struct
file_struct
**
files
;
};
};
struct
sum_buf
{
struct
sum_buf
{
...
@@ -316,6 +316,18 @@ struct exclude_struct {
...
@@ -316,6 +316,18 @@ struct exclude_struct {
int
local
;
int
local
;
};
};
struct
stats
{
int64
total_size
;
int64
total_transferred_size
;
int64
total_written
;
int64
total_read
;
int64
literal_data
;
int64
matched_data
;
int
flist_size
;
int
num_files
;
int
num_transferred_files
;
};
/* we need this function because of the silly way in which duplicate
/* we need this function because of the silly way in which duplicate
entries are handled in the file lists - we can't change this
entries are handled in the file lists - we can't change this
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment