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
580cffde
Commit
580cffde
authored
Jan 15, 2011
by
Wayne Davison
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sender realigns chunks with generator during an --inplace copy
when sending a sequence of zeros.
parent
58a1c1a2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
3 deletions
+21
-3
match.c
match.c
+21
-3
No files found.
match.c
View file @
580cffde
...
@@ -237,10 +237,11 @@ static void hash_search(int f,struct sum_struct *s,
...
@@ -237,10 +237,11 @@ static void hash_search(int f,struct sum_struct *s,
/* All the generator's chunks start at blength boundaries. */
/* All the generator's chunks start at blength boundaries. */
while
(
aligned_offset
<
offset
)
while
(
aligned_offset
<
offset
)
aligned_offset
+=
s
->
blength
;
aligned_offset
+=
s
->
blength
;
if
(
offset
==
aligned_offset
)
{
if
(
offset
==
aligned_offset
||
(
sum
==
0
&&
l
==
s
->
blength
&&
aligned_offset
+
l
<=
len
))
{
int32
i2
;
int32
i2
;
for
(
i2
=
i
;
i2
>=
0
;
i2
=
s
->
sums
[
i2
].
chain
)
{
for
(
i2
=
i
;
i2
>=
0
;
i2
=
s
->
sums
[
i2
].
chain
)
{
if
(
s
->
sums
[
i2
].
offset
!=
offset
)
if
(
s
->
sums
[
i2
].
offset
!=
aligned_
offset
)
continue
;
continue
;
if
(
i2
!=
i
)
{
if
(
i2
!=
i
)
{
if
(
sum
!=
s
->
sums
[
i2
].
sum1
if
(
sum
!=
s
->
sums
[
i2
].
sum1
...
@@ -249,9 +250,26 @@ static void hash_search(int f,struct sum_struct *s,
...
@@ -249,9 +250,26 @@ static void hash_search(int f,struct sum_struct *s,
break
;
break
;
i
=
i2
;
i
=
i2
;
}
}
want_i
=
i
;
if
(
offset
!=
aligned_offset
)
{
/* We've matched some zeros in a spot that is also zeros
* further along in the basis file, if we find zeros ahead
* in the sender's file, we'll output enough literal data
* to re-align with the basis file, and get back to seeking
* instead of writing. */
map
=
(
schar
*
)
map_ptr
(
buf
,
aligned_offset
,
l
);
sum
=
get_checksum1
((
char
*
)
map
,
l
);
if
(
sum
!=
s
->
sums
[
i2
].
sum1
)
break
;
get_checksum2
((
char
*
)
map
,
l
,
sum2
);
if
(
memcmp
(
sum2
,
s
->
sums
[
i2
].
sum2
,
s
->
s2length
)
!=
0
)
break
;
/* OK, we have a re-alignment match. Bump the offset
* forward to the new match point. */
offset
=
aligned_offset
;
}
/* This chunk remained in the same spot in the old and new file. */
/* This chunk remained in the same spot in the old and new file. */
s
->
sums
[
i
].
flags
|=
SUMFLG_SAME_OFFSET
;
s
->
sums
[
i
].
flags
|=
SUMFLG_SAME_OFFSET
;
want_i
=
i
;
break
;
break
;
}
}
}
}
...
...
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