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
