Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Callbacks from process.fs always start with error object
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Feb 2, 2010
1 parent fc025f8 commit 9874412
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 15 deletions.
7 changes: 4 additions & 3 deletions src/node.js
Expand Up @@ -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));
}
};
}
Expand Down
28 changes: 16 additions & 12 deletions src/node_file.cc
Expand Up @@ -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:
Expand All @@ -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;
}

Expand All @@ -100,8 +104,8 @@ static int After(eio_req *req) {
#endif
}

argc = 1;
argv[0] = names;
argc = 2;
argv[1] = names;
break;
}

Expand Down

0 comments on commit 9874412

Please sign in to comment.