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
11c26e32
Commit
11c26e32
authored
Apr 23, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented ethereum package reader
parent
69302609
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
123 additions
and
0 deletions
+123
-0
package.go
ethutil/package.go
+123
-0
No files found.
ethutil/package.go
0 → 100644
View file @
11c26e32
package
ethutil
import
(
"archive/zip"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"strings"
)
// Manifest object
//
// The manifest object holds all the relevant information supplied with the
// the manifest specified in the package
type
Manifest
struct
{
Entry
string
Height
,
Width
int
}
// External package
//
// External package contains the main html file and manifest
type
ExtPackage
struct
{
EntryHtml
string
Manifest
*
Manifest
}
// Read file
//
// Read a given compressed file and returns the read bytes.
// Returns an error otherwise
func
ReadFile
(
f
*
zip
.
File
)
([]
byte
,
error
)
{
rc
,
err
:=
f
.
Open
()
if
err
!=
nil
{
return
nil
,
err
}
defer
rc
.
Close
()
content
,
err
:=
ioutil
.
ReadAll
(
rc
)
if
err
!=
nil
{
return
nil
,
err
}
return
content
,
nil
}
// Reads manifest
//
// Reads and returns a manifest object. Returns error otherwise
func
ReadManifest
(
m
[]
byte
)
(
*
Manifest
,
error
)
{
var
manifest
Manifest
dec
:=
json
.
NewDecoder
(
strings
.
NewReader
(
string
(
m
)))
if
err
:=
dec
.
Decode
(
&
manifest
);
err
==
io
.
EOF
{
}
else
if
err
!=
nil
{
return
nil
,
err
}
return
&
manifest
,
nil
}
// Find file in archive
//
// Returns the index of the given file name if it exists. -1 if file not found
func
FindFileInArchive
(
fn
string
,
files
[]
*
zip
.
File
)
(
index
int
)
{
index
=
-
1
// Find the manifest first
for
i
,
f
:=
range
files
{
if
f
.
Name
==
fn
{
index
=
i
}
}
return
}
// Open package
//
// Opens a prepared ethereum package
// Reads the manifest file and determines file contents and returns and
// the external package.
func
OpenPackage
(
fn
string
)
(
*
ExtPackage
,
error
)
{
r
,
err
:=
zip
.
OpenReader
(
fn
)
if
err
!=
nil
{
return
nil
,
err
}
defer
r
.
Close
()
manifestIndex
:=
FindFileInArchive
(
"manifest.json"
,
r
.
File
)
if
manifestIndex
<
0
{
return
nil
,
fmt
.
Errorf
(
"No manifest file found in archive"
)
}
f
,
err
:=
ReadFile
(
r
.
File
[
manifestIndex
])
if
err
!=
nil
{
return
nil
,
err
}
manifest
,
err
:=
ReadManifest
(
f
)
if
err
!=
nil
{
return
nil
,
err
}
if
manifest
.
Entry
==
""
{
return
nil
,
fmt
.
Errorf
(
"Entry file specified but appears to be empty: %s"
,
manifest
.
Entry
)
}
entryIndex
:=
FindFileInArchive
(
manifest
.
Entry
,
r
.
File
)
if
entryIndex
<
0
{
return
nil
,
fmt
.
Errorf
(
"Entry file not found: '%s'"
,
manifest
.
Entry
)
}
f
,
err
=
ReadFile
(
r
.
File
[
entryIndex
])
if
err
!=
nil
{
return
nil
,
err
}
extPackage
:=
&
ExtPackage
{
string
(
f
),
manifest
}
return
extPackage
,
nil
}
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