Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
2cfbf76d
Commit
2cfbf76d
authored
Jan 05, 2015
by
Jeffrey Wilcke
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #233 from fjl/rlpdump
cmd/rlpdump: new helper command
parents
952287db
b907a5d7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
128 additions
and
0 deletions
+128
-0
main.go
cmd/rlpdump/main.go
+128
-0
No files found.
cmd/rlpdump/main.go
0 → 100644
View file @
2cfbf76d
package
main
import
(
"bufio"
"bytes"
"encoding/hex"
"flag"
"fmt"
"io"
"os"
"strings"
"github.com/ethereum/go-ethereum/rlp"
)
var
(
hexMode
=
flag
.
String
(
"hex"
,
""
,
"dump given hex data"
)
noASCII
=
flag
.
Bool
(
"noascii"
,
false
,
"don't print ASCII strings readably"
)
)
func
init
()
{
flag
.
Usage
=
func
()
{
fmt
.
Fprintln
(
os
.
Stderr
,
"Usage:"
,
os
.
Args
[
0
],
"[-noascii] [-hex <data>] [filename]"
)
flag
.
PrintDefaults
()
fmt
.
Fprintln
(
os
.
Stderr
,
`
Dumps RLP data from the given file in readable form.
If the filename is omitted, data is read from stdin.`
)
}
}
func
main
()
{
flag
.
Parse
()
var
r
io
.
Reader
switch
{
case
*
hexMode
!=
""
:
data
,
err
:=
hex
.
DecodeString
(
*
hexMode
)
if
err
!=
nil
{
die
(
err
)
}
r
=
bytes
.
NewReader
(
data
)
case
flag
.
NArg
()
==
0
:
r
=
os
.
Stdin
case
flag
.
NArg
()
==
1
:
fd
,
err
:=
os
.
Open
(
flag
.
Arg
(
0
))
if
err
!=
nil
{
die
(
err
)
}
defer
fd
.
Close
()
r
=
bufio
.
NewReader
(
fd
)
default
:
fmt
.
Fprintln
(
os
.
Stderr
,
"Error: too many arguments"
)
flag
.
Usage
()
os
.
Exit
(
2
)
}
s
:=
rlp
.
NewStream
(
r
)
for
{
if
err
:=
dump
(
s
,
0
);
err
!=
nil
{
if
err
!=
io
.
EOF
{
die
(
err
)
}
break
}
fmt
.
Println
()
}
}
func
dump
(
s
*
rlp
.
Stream
,
depth
int
)
error
{
kind
,
size
,
err
:=
s
.
Kind
()
if
err
!=
nil
{
return
err
}
switch
kind
{
case
rlp
.
Byte
,
rlp
.
String
:
str
,
err
:=
s
.
Bytes
()
if
err
!=
nil
{
return
err
}
if
len
(
str
)
==
0
||
!*
noASCII
&&
isASCII
(
str
)
{
fmt
.
Printf
(
"%s%q"
,
ws
(
depth
),
str
)
}
else
{
fmt
.
Printf
(
"%s%x"
,
ws
(
depth
),
str
)
}
case
rlp
.
List
:
s
.
List
()
defer
s
.
ListEnd
()
if
size
==
0
{
fmt
.
Printf
(
ws
(
depth
)
+
"[]"
)
return
nil
}
else
{
fmt
.
Println
(
ws
(
depth
)
+
"["
)
for
i
:=
0
;
;
i
++
{
if
i
>
0
{
fmt
.
Print
(
",
\n
"
)
}
if
err
:=
dump
(
s
,
depth
+
1
);
err
==
rlp
.
EOL
{
break
}
else
if
err
!=
nil
{
return
err
}
}
fmt
.
Print
(
ws
(
depth
)
+
"]"
)
}
}
return
nil
}
func
isASCII
(
b
[]
byte
)
bool
{
for
_
,
c
:=
range
b
{
if
c
<
32
||
c
>
126
{
return
false
}
}
return
true
}
func
ws
(
n
int
)
string
{
return
strings
.
Repeat
(
" "
,
n
)
}
func
die
(
args
...
interface
{})
{
fmt
.
Fprintln
(
os
.
Stderr
,
args
...
)
os
.
Exit
(
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