Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
7de2f7e0
Commit
7de2f7e0
authored
Aug 13, 2012
by
Pieter Noordhuis
Committed by
antirez
Aug 22, 2012
Browse files
Set p to its new offset before modifying it
parent
2a18c2c4
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/ziplist.c
View file @
7de2f7e0
...
...
@@ -445,12 +445,13 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
totlen
=
p
-
first
.
p
;
if
(
totlen
>
0
)
{
if
(
p
[
0
]
!=
ZIP_END
)
{
/*
Tricky: s
toring
the
prevlen in this entry m
ight reduce or
*
increase the
number of bytes
needed,
compare
d
to the current
*
prevlen. Note that we can always
store this
length
because
*
it was previously
stored by an entry that is being deleted. */
/*
S
toring
`
prev
raw
len
`
in this entry m
ay increase or decrease the
* number of bytes
required
compare to the current
`prevrawlen`.
*
There always is room to
store this
,
because
it was previously
* stored by an entry that is
now
being deleted. */
nextdiff
=
zipPrevLenByteDiff
(
p
,
first
.
prevrawlen
);
zipPrevEncodeLength
(
p
-
nextdiff
,
first
.
prevrawlen
);
p
-=
nextdiff
;
zipPrevEncodeLength
(
p
,
first
.
prevrawlen
);
/* Update offset for tail */
ZIPLIST_TAIL_OFFSET
(
zl
)
-=
totlen
;
...
...
@@ -463,7 +464,7 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
ZIPLIST_TAIL_OFFSET
(
zl
)
+=
nextdiff
;
/* Move tail to the front of the ziplist */
memmove
(
first
.
p
,
p
-
nextdiff
,
ZIPLIST_BYTES
(
zl
)
-
(
p
-
zl
)
-
1
+
nextdiff
);
memmove
(
first
.
p
,
p
,
ZIPLIST_BYTES
(
zl
)
-
(
p
-
zl
)
-
1
);
}
else
{
/* The entire tail was deleted. No need to move memory. */
ZIPLIST_TAIL_OFFSET
(
zl
)
=
(
first
.
p
-
zl
)
-
first
.
prevrawlen
;
...
...
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