Skip to content

Commit 9784e78

Browse files
committed
util: change implementation to not use buffers
1 parent 472ec5a commit 9784e78

File tree

1 file changed

+19
-23
lines changed

1 file changed

+19
-23
lines changed

src/node_i18n.cc

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ using v8::NewStringType;
9797
using v8::Object;
9898
using v8::ObjectTemplate;
9999
using v8::String;
100-
using v8::Uint8Array;
101100
using v8::Value;
102101

103102
namespace i18n {
@@ -502,31 +501,28 @@ void ConverterObject::Decode(const FunctionCallbackInfo<Value>& args) {
502501
converter->set_bom_seen(true);
503502
}
504503
}
505-
ret = ToBufferEndian(env, &result);
506504

507-
if (!ret.IsEmpty()) {
508-
CHECK(ret.ToLocalChecked()->IsUint8Array());
509-
510-
if (omit_initial_bom) {
511-
// Perform `ret = ret.slice(2)`.
512-
Local<Uint8Array> orig_ret = ret.ToLocalChecked().As<Uint8Array>();
513-
ret = Buffer::New(env,
514-
orig_ret->Buffer(),
515-
orig_ret->ByteOffset() + 2,
516-
orig_ret->ByteLength() - 2)
517-
.FromMaybe(Local<Uint8Array>());
518-
}
505+
Local<Value> error;
506+
char16_t* output = result.out();
507+
size_t beginning = 0;
508+
size_t length = 0;
519509

520-
Local<Value> error;
521-
ArrayBufferViewContents<char> buf(ret.ToLocalChecked());
522-
MaybeLocal<Value> encoded = StringBytes::Encode(
523-
env->isolate(), buf.data(), buf.length(), encoding::UCS2, &error);
510+
for (size_t i = 0; i < result.length(); i++) length += sizeof(output[i]);
524511

525-
if (!encoded.IsEmpty()) {
526-
args.GetReturnValue().Set(encoded.ToLocalChecked());
527-
} else {
528-
args.GetReturnValue().Set(error);
529-
}
512+
if (omit_initial_bom) {
513+
// Perform `ret = ret.slice(2)`.
514+
beginning += 2;
515+
length -= 2;
516+
}
517+
518+
const char* value = reinterpret_cast<const char*>(output) + beginning;
519+
MaybeLocal<Value> encoded =
520+
StringBytes::Encode(env->isolate(), value, length, UCS2, &error);
521+
522+
if (!encoded.IsEmpty()) {
523+
args.GetReturnValue().Set(encoded.ToLocalChecked());
524+
} else {
525+
args.GetReturnValue().Set(error);
530526
}
531527

532528
return;

0 commit comments

Comments
 (0)