mirror of
https://github.com/nodejs/node.git
synced 2024-11-29 23:16:30 +01:00
Callbacks from process.fs always start with error object
This commit is contained in:
parent
fc025f878a
commit
987441283b
@ -507,11 +507,12 @@ var posixModule = createInternalModule("posix", function (exports) {
|
||||
exports.Stats = process.Stats;
|
||||
|
||||
function callback (promise) {
|
||||
return function () {
|
||||
if (arguments[0] instanceof Error) {
|
||||
return function (error) {
|
||||
if (error) {
|
||||
promise.emitError.apply(promise, arguments);
|
||||
} else {
|
||||
promise.emitSuccess.apply(promise, arguments);
|
||||
promise.emitSuccess.apply(promise,
|
||||
Array.prototype.slice.call(arguments, 1));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -37,12 +37,16 @@ static int After(eio_req *req) {
|
||||
ev_unref(EV_DEFAULT_UC);
|
||||
|
||||
int argc = 0;
|
||||
Local<Value> argv[5]; // 5 is the maximum number of args
|
||||
Local<Value> argv[6]; // 6 is the maximum number of args
|
||||
|
||||
if (req->errorno != 0) {
|
||||
argc = 1;
|
||||
argv[0] = errno_exception(req->errorno);
|
||||
} else {
|
||||
// Note: the error is always given the first argument of the callback.
|
||||
// If there is no error then then the first argument is null.
|
||||
argv[0] = Local<Value>::New(Null());
|
||||
|
||||
switch (req->type) {
|
||||
case EIO_CLOSE:
|
||||
case EIO_RENAME:
|
||||
@ -54,30 +58,30 @@ static int After(eio_req *req) {
|
||||
|
||||
case EIO_OPEN:
|
||||
case EIO_SENDFILE:
|
||||
argc = 1;
|
||||
argv[0] = Integer::New(req->result);
|
||||
argc = 2;
|
||||
argv[1] = Integer::New(req->result);
|
||||
break;
|
||||
|
||||
case EIO_WRITE:
|
||||
argc = 1;
|
||||
argv[0] = Integer::New(req->result);
|
||||
argc = 2;
|
||||
argv[1] = Integer::New(req->result);
|
||||
break;
|
||||
|
||||
case EIO_STAT:
|
||||
{
|
||||
struct stat *s = reinterpret_cast<struct stat*>(req->ptr2);
|
||||
argc = 1;
|
||||
argv[0] = BuildStatsObject(s);
|
||||
argc = 2;
|
||||
argv[1] = BuildStatsObject(s);
|
||||
break;
|
||||
}
|
||||
|
||||
case EIO_READ:
|
||||
{
|
||||
argc = 2;
|
||||
argc = 3;
|
||||
Local<Object> obj = Local<Object>::New(*callback);
|
||||
Local<Value> enc_val = obj->GetHiddenValue(encoding_symbol);
|
||||
argv[0] = Encode(req->ptr2, req->result, ParseEncoding(enc_val));
|
||||
argv[1] = Integer::New(req->result);
|
||||
argv[1] = Encode(req->ptr2, req->result, ParseEncoding(enc_val));
|
||||
argv[2] = Integer::New(req->result);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -100,8 +104,8 @@ static int After(eio_req *req) {
|
||||
#endif
|
||||
}
|
||||
|
||||
argc = 1;
|
||||
argv[0] = names;
|
||||
argc = 2;
|
||||
argv[1] = names;
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user