Skip to content

Commit 304b1c6

Browse files
committed
Refactor buffer handling in main.cc by introducing bufferFromVector function to streamline buffer creation from vectors, improving memory management in async operations.
1 parent d031d09 commit 304b1c6

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-hdiffpatch",
3-
"version": "1.1.1",
3+
"version": "1.1.2",
44
"description": "hdiffpatch port to node.js",
55
"main": "index.js",
66
"bin": {

src/main.cc

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <napi.h>
77
#include <cstdlib>
88
#include <string>
9+
#include <utility>
910
#include <vector>
1011
#include "hdiff.h"
1112
#include "hpatch.h"
@@ -36,6 +37,22 @@ namespace hdiffpatchNode
3637
return true;
3738
}
3839

40+
inline Napi::Buffer<uint8_t> bufferFromVector(Napi::Env env, std::vector<uint8_t>&& data) {
41+
if (data.empty()) {
42+
return Napi::Buffer<uint8_t>::New(env, 0);
43+
}
44+
auto* vec = new std::vector<uint8_t>(std::move(data));
45+
return Napi::Buffer<uint8_t>::New(
46+
env,
47+
vec->data(),
48+
vec->size(),
49+
[](Napi::Env /*env*/, uint8_t* /*data*/, std::vector<uint8_t>* vecPtr) {
50+
delete vecPtr;
51+
},
52+
vec
53+
);
54+
}
55+
3956
// ============ 异步 Diff Worker ============
4057
class DiffAsyncWorker : public Napi::AsyncWorker {
4158
public:
@@ -63,12 +80,7 @@ namespace hdiffpatchNode
6380
void OnOK() override {
6481
Napi::Env env = Env();
6582
Napi::HandleScope scope(env);
66-
67-
// 创建 Buffer 并复制数据
68-
Napi::Buffer<uint8_t> resultBuf = Napi::Buffer<uint8_t>::Copy(
69-
env, result_.data(), result_.size()
70-
);
71-
83+
Napi::Buffer<uint8_t> resultBuf = bufferFromVector(env, std::move(result_));
7284
Callback().Call({env.Null(), resultBuf});
7385
oldRef_.Reset();
7486
newRef_.Reset();
@@ -119,11 +131,7 @@ namespace hdiffpatchNode
119131
void OnOK() override {
120132
Napi::Env env = Env();
121133
Napi::HandleScope scope(env);
122-
123-
Napi::Buffer<uint8_t> resultBuf = Napi::Buffer<uint8_t>::Copy(
124-
env, result_.data(), result_.size()
125-
);
126-
134+
Napi::Buffer<uint8_t> resultBuf = bufferFromVector(env, std::move(result_));
127135
Callback().Call({env.Null(), resultBuf});
128136
oldRef_.Reset();
129137
diffRef_.Reset();
@@ -261,7 +269,7 @@ namespace hdiffpatchNode
261269
return env.Undefined();
262270
}
263271

264-
return Napi::Buffer<uint8_t>::Copy(env, codeBuf.data(), codeBuf.size());
272+
return bufferFromVector(env, std::move(codeBuf));
265273
}
266274

267275
// ============ 同步/异步 patch ============
@@ -306,7 +314,7 @@ namespace hdiffpatchNode
306314
return env.Undefined();
307315
}
308316

309-
return Napi::Buffer<uint8_t>::Copy(env, newBuf.data(), newBuf.size());
317+
return bufferFromVector(env, std::move(newBuf));
310318
}
311319

312320
// ============ 同步/异步 diffStream ============

0 commit comments

Comments
 (0)