Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
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
...
@@ -445,12 +445,13 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
totlen
=
p
-
first
.
p
;
totlen
=
p
-
first
.
p
;
if
(
totlen
>
0
)
{
if
(
totlen
>
0
)
{
if
(
p
[
0
]
!=
ZIP_END
)
{
if
(
p
[
0
]
!=
ZIP_END
)
{
/*
Tricky: s
toring
the
prevlen in this entry m
ight reduce or
/*
S
toring
`
prev
raw
len
`
in this entry m
ay increase or decrease the
*
increase the
number of bytes
needed,
compare
d
to the current
* number of bytes
required
compare to the current
`prevrawlen`.
*
prevlen. Note that we can always
store this
length
because
*
There always is room to
store this
,
because
it was previously
*
it was previously
stored by an entry that is being deleted. */
* stored by an entry that is
now
being deleted. */
nextdiff
=
zipPrevLenByteDiff
(
p
,
first
.
prevrawlen
);
nextdiff
=
zipPrevLenByteDiff
(
p
,
first
.
prevrawlen
);
zipPrevEncodeLength
(
p
-
nextdiff
,
first
.
prevrawlen
);
p
-=
nextdiff
;
zipPrevEncodeLength
(
p
,
first
.
prevrawlen
);
/* Update offset for tail */
/* Update offset for tail */
ZIPLIST_TAIL_OFFSET
(
zl
)
-=
totlen
;
ZIPLIST_TAIL_OFFSET
(
zl
)
-=
totlen
;
...
@@ -463,7 +464,7 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
...
@@ -463,7 +464,7 @@ static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsig
ZIPLIST_TAIL_OFFSET
(
zl
)
+=
nextdiff
;
ZIPLIST_TAIL_OFFSET
(
zl
)
+=
nextdiff
;
/* Move tail to the front of the ziplist */
/* 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
{
}
else
{
/* The entire tail was deleted. No need to move memory. */
/* The entire tail was deleted. No need to move memory. */
ZIPLIST_TAIL_OFFSET
(
zl
)
=
(
first
.
p
-
zl
)
-
first
.
prevrawlen
;
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