Skip to content

Commit

Permalink
zlib: generate error code names in C++
Browse files Browse the repository at this point in the history
This makes it easier to implement the lookup in a way that targets
error codes from a specific compression library, as a way towards
supporting multiple ones (e.g. brotli).

PR-URL: #23413
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
addaleax authored and jasnell committed Oct 17, 2018
1 parent 208ee3e commit e082863
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
4 changes: 2 additions & 2 deletions lib/zlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ function zlibBufferSync(engine, buffer) {
return buffer;
}

function zlibOnError(message, errno) {
function zlibOnError(message, errno, code) {
var self = this[owner_symbol];
// there is no way to cleanly recover.
// continuing only obscures problems.
Expand All @@ -153,7 +153,7 @@ function zlibOnError(message, errno) {
// eslint-disable-next-line no-restricted-syntax
const error = new Error(message);
error.errno = errno;
error.code = codes[errno];
error.code = code;
self.emit('error', error);
}

Expand Down
25 changes: 22 additions & 3 deletions src/node_zlib.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ using v8::FunctionCallbackInfo;
using v8::FunctionTemplate;
using v8::HandleScope;
using v8::Int32;
using v8::Integer;
using v8::Local;
using v8::Number;
using v8::Object;
using v8::String;
using v8::Uint32;
Expand All @@ -56,6 +56,24 @@ using v8::Value;

namespace {

#define ZLIB_ERROR_CODES(V) \
V(Z_OK) \
V(Z_STREAM_END) \
V(Z_NEED_DICT) \
V(Z_ERRNO) \
V(Z_STREAM_ERROR) \
V(Z_DATA_ERROR) \
V(Z_MEM_ERROR) \
V(Z_BUF_ERROR) \
V(Z_VERSION_ERROR) \

inline const char* ZlibStrerror(int err) {
#define V(code) if (err == code) return #code;
ZLIB_ERROR_CODES(V)
#undef V
return "Z_UNKNOWN_ERROR";
}

enum node_zlib_mode {
NONE,
DEFLATE,
Expand Down Expand Up @@ -404,9 +422,10 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork {
}

HandleScope scope(env()->isolate());
Local<Value> args[2] = {
Local<Value> args[3] = {
OneByteString(env()->isolate(), message),
Number::New(env()->isolate(), err_)
Integer::New(env()->isolate(), err_),
OneByteString(env()->isolate(), ZlibStrerror(err_))
};
MakeCallback(env()->onerror_string(), arraysize(args), args);

Expand Down

0 comments on commit e082863

Please sign in to comment.