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
a5eddcdf
Commit
a5eddcdf
authored
Sep 03, 2010
by
antirez
Browse files
Fix for issue 300 backported from master
parent
f8fa3e28
Changes
1
Show whitespace changes
Inline
Side-by-side
redis-check-dump.c
View file @
a5eddcdf
...
@@ -65,8 +65,8 @@
...
@@ -65,8 +65,8 @@
/* data type to hold offset in file and size */
/* data type to hold offset in file and size */
typedef
struct
{
typedef
struct
{
void
*
data
;
void
*
data
;
unsigned
long
size
;
size_t
size
;
unsigned
long
offset
;
size_t
offset
;
}
pos
;
}
pos
;
static
unsigned
char
level
=
0
;
static
unsigned
char
level
=
0
;
...
@@ -77,8 +77,8 @@ static pos positions[16];
...
@@ -77,8 +77,8 @@ static pos positions[16];
/* Hold a stack of errors */
/* Hold a stack of errors */
typedef
struct
{
typedef
struct
{
char
error
[
16
][
1024
];
char
error
[
16
][
1024
];
unsigned
long
offset
[
16
];
size_t
offset
[
16
];
unsigned
in
t
level
;
size_
t
level
;
}
errors_t
;
}
errors_t
;
static
errors_t
errors
;
static
errors_t
errors
;
...
@@ -112,7 +112,7 @@ int readBytes(void *target, long num) {
...
@@ -112,7 +112,7 @@ int readBytes(void *target, long num) {
if
(
p
.
offset
+
num
>
p
.
size
)
{
if
(
p
.
offset
+
num
>
p
.
size
)
{
return
0
;
return
0
;
}
else
{
}
else
{
memcpy
(
target
,
(
void
*
)((
unsigned
long
)
p
.
data
+
p
.
offset
),
num
);
memcpy
(
target
,
(
void
*
)((
size_t
)
p
.
data
+
p
.
offset
),
num
);
if
(
!
peek
)
positions
[
level
].
offset
+=
num
;
if
(
!
peek
)
positions
[
level
].
offset
+=
num
;
}
}
return
1
;
return
1
;
...
@@ -494,15 +494,17 @@ void printCentered(int indent, int width, char* body) {
...
@@ -494,15 +494,17 @@ void printCentered(int indent, int width, char* body) {
printf
(
"%s %s %s
\n
"
,
head
,
body
,
tail
);
printf
(
"%s %s %s
\n
"
,
head
,
body
,
tail
);
}
}
void
printValid
(
int
ops
,
int
bytes
)
{
void
printValid
(
u
int
64_t
ops
,
u
int
64_t
bytes
)
{
char
body
[
80
];
char
body
[
80
];
sprintf
(
body
,
"Processed %d valid opcodes (in %d bytes)"
,
ops
,
bytes
);
sprintf
(
body
,
"Processed %llu valid opcodes (in %llu bytes)"
,
(
unsigned
long
long
)
ops
,
(
unsigned
long
long
)
bytes
);
printCentered
(
4
,
80
,
body
);
printCentered
(
4
,
80
,
body
);
}
}
void
printSkipped
(
int
bytes
,
int
offset
)
{
void
printSkipped
(
u
int
64_t
bytes
,
u
int
64_t
offset
)
{
char
body
[
80
];
char
body
[
80
];
sprintf
(
body
,
"Skipped %d bytes (resuming at 0x%08x)"
,
bytes
,
offset
);
sprintf
(
body
,
"Skipped %llu bytes (resuming at 0x%08llx)"
,
(
unsigned
long
long
)
bytes
,
(
unsigned
long
long
)
offset
);
printCentered
(
4
,
80
,
body
);
printCentered
(
4
,
80
,
body
);
}
}
...
@@ -541,7 +543,7 @@ void printErrorStack(entry *e) {
...
@@ -541,7 +543,7 @@ void printErrorStack(entry *e) {
}
}
void
process
()
{
void
process
()
{
int
i
,
num_errors
=
0
,
num_valid_ops
=
0
,
num_valid_bytes
=
0
;
u
int
64_t
num_errors
=
0
,
num_valid_ops
=
0
,
num_valid_bytes
=
0
;
entry
entry
;
entry
entry
;
processHeader
();
processHeader
();
...
@@ -558,7 +560,9 @@ void process() {
...
@@ -558,7 +560,9 @@ void process() {
num_valid_bytes
=
0
;
num_valid_bytes
=
0
;
/* search for next valid entry */
/* search for next valid entry */
unsigned
long
offset
=
positions
[
0
].
offset
+
1
;
uint64_t
offset
=
positions
[
0
].
offset
+
1
;
int
i
=
0
;
while
(
!
entry
.
success
&&
offset
<
positions
[
0
].
size
)
{
while
(
!
entry
.
success
&&
offset
<
positions
[
0
].
size
)
{
positions
[
1
].
offset
=
offset
;
positions
[
1
].
offset
=
offset
;
...
@@ -606,9 +610,10 @@ void process() {
...
@@ -606,9 +610,10 @@ void process() {
}
}
/* print summary on errors */
/* print summary on errors */
if
(
num_errors
>
0
)
{
if
(
num_errors
)
{
printf
(
"
\n
"
);
printf
(
"
\n
"
);
printf
(
"Total unprocessable opcodes: %d
\n
"
,
num_errors
);
printf
(
"Total unprocessable opcodes: %llu
\n
"
,
(
unsigned
long
long
)
num_errors
);
}
}
}
}
...
@@ -620,7 +625,7 @@ int main(int argc, char **argv) {
...
@@ -620,7 +625,7 @@ int main(int argc, char **argv) {
}
}
int
fd
;
int
fd
;
unsigned
long
size
;
off_t
size
;
struct
stat
stat
;
struct
stat
stat
;
void
*
data
;
void
*
data
;
...
@@ -634,6 +639,10 @@ int main(int argc, char **argv) {
...
@@ -634,6 +639,10 @@ int main(int argc, char **argv) {
size
=
stat
.
st_size
;
size
=
stat
.
st_size
;
}
}
if
(
sizeof
(
size_t
)
==
sizeof
(
int32_t
)
&&
size
>=
INT_MAX
)
{
ERROR
(
"Cannot check dump files >2GB on a 32-bit platform
\n
"
);
}
data
=
mmap
(
NULL
,
size
,
PROT_READ
,
MAP_SHARED
,
fd
,
0
);
data
=
mmap
(
NULL
,
size
,
PROT_READ
,
MAP_SHARED
,
fd
,
0
);
if
(
data
==
MAP_FAILED
)
{
if
(
data
==
MAP_FAILED
)
{
ERROR
(
"Cannot mmap: %s
\n
"
,
argv
[
1
]);
ERROR
(
"Cannot mmap: %s
\n
"
,
argv
[
1
]);
...
...
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