Reviewers: Jakob,
Message:
PTAL.
Description:
Introduce readbinary function in d8 to read binary files.
Please review this at http://codereview.chromium.org/9283015/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/d8.h
M src/d8.cc
Index: src/d8.cc
diff --git a/src/d8.cc b/src/d8.cc
index
bfb99440272688ef271be0856c910dc7def74adc..e9c3c0e72d8a738f52fef3c2a53ff62565fae20b
100644
--- a/src/d8.cc
+++ b/src/d8.cc
@@ -803,6 +803,8 @@ Handle<ObjectTemplate> Shell::CreateGlobalTemplate() {
global_template->Set(String::New("print"), FunctionTemplate::New(Print));
global_template->Set(String::New("write"), FunctionTemplate::New(Write));
global_template->Set(String::New("read"), FunctionTemplate::New(Read));
+ global_template->Set(String::New("readbinary"),
+ FunctionTemplate::New(ReadBinary));
global_template->Set(String::New("readline"),
FunctionTemplate::New(ReadLine));
global_template->Set(String::New("load"), FunctionTemplate::New(Load));
@@ -1021,6 +1023,19 @@ static char* ReadChars(const char* name, int*
size_out) {
}
+Handle<Value> Shell::ReadBinary(const Arguments& args) {
+ String::Utf8Value filename(args[0]);
+ int size;
+ char* chars = ReadChars(*filename, &size);
+ // We skip checking the string for UTF8 characters and use it raw as
+ // backing store for the external string with 8-bit characters.
+ BinaryResource* resource = new BinaryResource(chars, size);
+ i::Handle<i::String> string(
+ FACTORY->NewExternalStringFromAscii(resource));
+ return Utils::ToLocal(string);
+}
+
+
#ifndef V8_SHARED
static char* ReadToken(char* data, char token) {
char* next = i::OS::StrChr(data, token);
Index: src/d8.h
diff --git a/src/d8.h b/src/d8.h
index
60a8c1bf760b722b880fdea52e73d3589615996a..7f3e31bfb0d2e96365d95b26ec8ab74e2b12c3ed
100644
--- a/src/d8.h
+++ b/src/d8.h
@@ -195,6 +195,27 @@ class SourceGroup {
};
+class BinaryResource : public v8::String::ExternalAsciiStringResource {
+ public:
+ explicit BinaryResource(const char* string, int length)
+ : data_(string),
+ length_(length) { }
+
+ ~BinaryResource() {
+ delete data_;
+ data_ = NULL;
+ length_ = 0;
+ }
+
+ virtual const char* data() const { return data_; }
+ virtual size_t length() const { return length_; }
+
+ private:
+ const char* data_;
+ size_t length_;
+};
+
+
class ShellOptions {
public:
ShellOptions() :
@@ -286,6 +307,7 @@ class Shell : public i::AllStatic {
static Handle<Value> EnableProfiler(const Arguments& args);
static Handle<Value> DisableProfiler(const Arguments& args);
static Handle<Value> Read(const Arguments& args);
+ static Handle<Value> ReadBinary(const Arguments& args);
static Handle<String> ReadFromStdin();
static Handle<Value> ReadLine(const Arguments& args) {
return ReadFromStdin();
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev