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

Reply via email to