Skip to content

Commit 5281f29

Browse files
committed
Use new method of getting chars written for UTF8
1 parent d2e1b08 commit 5281f29

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

lib/net.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,7 @@ Stream.prototype._writeOut = function (data, encoding) {
432432
if (encoding == 'utf8' || encoding == 'utf-8') {
433433
// default to utf8
434434
bytesWritten = pool.write(data, 'utf8', pool.used);
435-
// XXX Hacky way to find out the number of characters written.
436-
// Waiting for a more optimal way: http://codereview.chromium.org/1539013
437-
var _s = pool.toString('utf8', pool.used, pool.used + bytesWritten);
438-
charsWritten = _s.length;
435+
charsWritten = Buffer._charsWritten;
439436
} else {
440437
bytesWritten = pool.write(data, encoding, pool.used);
441438
charsWritten = bytesWritten;

src/node_buffer.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ using namespace v8;
3838

3939

4040
static Persistent<String> length_symbol;
41+
static Persistent<String> chars_written_sym;
4142
Persistent<FunctionTemplate> Buffer::constructor_template;
4243

4344

@@ -308,11 +309,16 @@ Handle<Value> Buffer::Utf8Write(const Arguments &args) {
308309

309310
const char *p = buffer->data() + offset;
310311

312+
int char_written;
313+
311314
int written = s->WriteUtf8((char*)p,
312315
buffer->length_ - offset,
313-
NULL,
316+
&char_written,
314317
String::HINT_MANY_WRITES_EXPECTED);
315318

319+
constructor_template->GetFunction()->Set(chars_written_sym,
320+
Integer::New(char_written));
321+
316322
if (written > 0 && p[written-1] == '\0') written--;
317323

318324
return scope.Close(Integer::New(written));
@@ -463,6 +469,7 @@ void Buffer::Initialize(Handle<Object> target) {
463469
HandleScope scope;
464470

465471
length_symbol = Persistent<String>::New(String::NewSymbol("length"));
472+
chars_written_sym = Persistent<String>::New(String::NewSymbol("_charsWritten"));
466473

467474
Local<FunctionTemplate> t = FunctionTemplate::New(Buffer::New);
468475
constructor_template = Persistent<FunctionTemplate>::New(t);

0 commit comments

Comments
 (0)