Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Support encoding
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Nov 19, 2010
1 parent dcc547d commit d74c506
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
8 changes: 5 additions & 3 deletions src/node_buffer.cc
Expand Up @@ -82,7 +82,8 @@ static size_t ByteLength (Handle<String> string, enum encoding enc) {
}


Handle<Object> Buffer::New(Handle<String> string) {
Handle<Object> Buffer::New(Handle<String> string,
Handle<Value> encoding) {
HandleScope scope;

// get Buffer from global scope.
Expand All @@ -91,8 +92,9 @@ Handle<Object> Buffer::New(Handle<String> string) {
assert(bv->IsFunction());
Local<Function> b = Local<Function>::Cast(bv);

Local<Value> argv[1] = { Local<Value>::New(string) };
Local<Object> instance = b->NewInstance(1, argv);
Local<Value> argv[2] = { Local<Value>::New(string),
Local<Value>::New(encoding) };
Local<Object> instance = b->NewInstance(2, argv);

return scope.Close(instance);
}
Expand Down
4 changes: 3 additions & 1 deletion src/node_buffer.h
Expand Up @@ -25,7 +25,9 @@ class Buffer : public ObjectWrap {
typedef void (*free_callback)(char *data, void *hint);

// C++ API for constructing fast buffer
static v8::Handle<v8::Object> New(v8::Handle<v8::String> string);
static v8::Handle<v8::Object> New(
v8::Handle<v8::String> string,
v8::Handle<v8::Value> encoding = v8::Handle<v8::Value>());

static void Initialize(v8::Handle<v8::Object> target);
static Buffer* New(size_t length); // public constructor
Expand Down
6 changes: 4 additions & 2 deletions src/node_io_watcher.cc
Expand Up @@ -31,6 +31,7 @@ static Persistent<String> prev_sym;
static Persistent<String> ondrain_sym;
static Persistent<String> onerror_sym;
static Persistent<String> data_sym;
static Persistent<String> encoding_sym;
static Persistent<String> offset_sym;
static Persistent<String> fd_sym;
static Persistent<String> is_unix_socket_sym;
Expand Down Expand Up @@ -65,6 +66,7 @@ void IOWatcher::Initialize(Handle<Object> target) {
fd_sym = NODE_PSYMBOL("fd");
is_unix_socket_sym = NODE_PSYMBOL("isUnixSocket");
data_sym = NODE_PSYMBOL("data");
encoding_sym = NODE_PSYMBOL("encoding");


ev_prepare_init(&dumper, IOWatcher::Dump);
Expand Down Expand Up @@ -321,9 +323,9 @@ void IOWatcher::Dump(EV_P_ ev_prepare *w, int revents) {

if (data_v->IsString()) {
// TODO: insert v8::String::Pointers() hack here.
// TODO: handle different encodings.
Local<String> s = data_v->ToString();
buf_object = Local<Object>::New(Buffer::New(s));
Local<Value> e = bucket->Get(encoding_sym);
buf_object = Local<Object>::New(Buffer::New(s, e));
bucket->Set(data_sym, buf_object);
} else if (Buffer::HasInstance(data_v)) {
buf_object = data_v->ToObject();
Expand Down

0 comments on commit d74c506

Please sign in to comment.