Revision: 10486
Author:   [email protected]
Date:     Tue Jan 24 03:55:11 2012
Log:      Introduce readbinary function in d8 to read binary files.

Review URL: https://chromiumcodereview.appspot.com/9283015
http://code.google.com/p/v8/source/detail?r=10486

Modified:
 /branches/bleeding_edge/src/d8.cc
 /branches/bleeding_edge/src/d8.h

=======================================
--- /branches/bleeding_edge/src/d8.cc   Fri Jan 20 03:59:00 2012
+++ /branches/bleeding_edge/src/d8.cc   Tue Jan 24 03:55:11 2012
@@ -803,6 +803,8 @@
   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));
@@ -1019,6 +1021,25 @@
   *size_out = size;
   return chars;
 }
+
+
+Handle<Value> Shell::ReadBinary(const Arguments& args) {
+  String::Utf8Value filename(args[0]);
+  int size;
+  if (*filename == NULL) {
+    return ThrowException(String::New("Error loading file"));
+  }
+  char* chars = ReadChars(*filename, &size);
+  if (chars == NULL) {
+    return ThrowException(String::New("Error reading file"));
+  }
+  // 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
=======================================
--- /branches/bleeding_edge/src/d8.h    Fri Jan 20 03:59:00 2012
+++ /branches/bleeding_edge/src/d8.h    Tue Jan 24 03:55:11 2012
@@ -195,6 +195,27 @@
 };


+class BinaryResource : public v8::String::ExternalAsciiStringResource {
+ public:
+  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 @@
   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