@@ -43,33 +43,28 @@ static int After(eio_req *req) {
4343
4444 ev_unref (EV_DEFAULT_UC);
4545
46- int argc = 0 ;
47- Local<Value> argv[6 ]; // 6 is the maximum number of args
48-
49- if (req->errorno != 0 ) {
50- argc = 1 ;
51- switch (req->type ) {
52- case EIO_STAT:
53- case EIO_LSTAT:
54- case EIO_LINK:
55- case EIO_UNLINK:
56- case EIO_RMDIR:
57- case EIO_RENAME:
58- case EIO_READLINK:
59- case EIO_OPEN:
60- case EIO_CHMOD:
61- case EIO_CHOWN:
62- case EIO_MKDIR:
63- argv[0 ] = ErrnoException (req->errorno , NULL , " " , static_cast <const char *>(req->ptr1 ));
64- break ;
65- default :
66- argv[0 ] = ErrnoException (req->errorno );
46+ // there is always at least one argument. "error"
47+ int argc = 1 ;
48+ Local<Value> argv[2 ]; // 6 is the maximum number of args
49+
50+ // NOTE: This may be needed to be changed if something returns a -1
51+ // for a success, which is possible.
52+ if (req->result == -1 ) {
53+ // If the request doesn't have a path parameter set.
54+ if (!req->ptr1 ) {
55+ argv[0 ] = ErrnoException (req->errorno );
56+ } else {
57+ argv[0 ] = ErrnoException (req->errorno , NULL , " " , static_cast <const char *>(req->ptr1 ));
6758 }
6859 } else {
69- // Note: the error is always given the first argument of the callback.
70- // If there is no error then then the first argument is null.
60+ // error value is empty or null for non-error.
7161 argv[0 ] = Local<Value>::New (Null ());
62+
63+ // All have at least two args now.
64+ argc = 2 ;
65+
7266 switch (req->type ) {
67+ // These all have no data to pass.
7368 case EIO_CLOSE:
7469 case EIO_RENAME:
7570 case EIO_UNLINK:
@@ -82,68 +77,59 @@ static int After(eio_req *req) {
8277 case EIO_SYMLINK:
8378 case EIO_CHMOD:
8479 case EIO_CHOWN:
85- argc = 0 ;
80+ // These, however, don't.
81+ argc = 1 ;
8682 break ;
8783
8884 case EIO_OPEN:
8985 case EIO_SENDFILE:
90- argc = 2 ;
9186 argv[1 ] = Integer::New (req->result );
9287 break ;
9388
9489 case EIO_WRITE:
95- argc = 2 ;
9690 argv[1 ] = Integer::New (req->result );
9791 break ;
9892
9993 case EIO_STAT:
10094 case EIO_LSTAT:
10195 case EIO_FSTAT:
102- {
103- struct stat *s = reinterpret_cast <struct stat *>(req->ptr2 );
104- argc = 2 ;
105- argv[ 1 ] = BuildStatsObject (s);
96+ {
97+ struct stat *s = reinterpret_cast <struct stat *>(req->ptr2 );
98+ argv[ 1 ] = BuildStatsObject (s) ;
99+ }
106100 break ;
107- }
108101
109102 case EIO_READLINK:
110- {
111- argc = 2 ;
112103 argv[1 ] = String::New (static_cast <char *>(req->ptr2 ), req->result );
113104 break ;
114- }
115105
116106 case EIO_READ:
117- {
118107 // Buffer interface
119108 argv[1 ] = Integer::New (req->result );
120- argc = 2 ;
121109 break ;
122- }
123110
124111 case EIO_READDIR:
125- {
126- char *namebuf = static_cast <char *>(req->ptr2 );
127- int nnames = req->result ;
112+ {
113+ char *namebuf = static_cast <char *>(req->ptr2 );
114+ int nnames = req->result ;
128115
129- Local<Array> names = Array::New (nnames);
116+ Local<Array> names = Array::New (nnames);
130117
131- for (int i = 0 ; i < nnames; i++) {
132- Local<String> name = String::New (namebuf);
133- names->Set (Integer::New (i), name);
118+ for (int i = 0 ; i < nnames; i++) {
119+ Local<String> name = String::New (namebuf);
120+ names->Set (Integer::New (i), name);
134121#ifndef NDEBUG
135- namebuf += strlen (namebuf);
136- assert (*namebuf == ' \0 ' );
137- namebuf += 1 ;
122+ namebuf += strlen (namebuf);
123+ assert (*namebuf == ' \0 ' );
124+ namebuf += 1 ;
138125#else
139- namebuf += strlen (namebuf) + 1 ;
126+ namebuf += strlen (namebuf) + 1 ;
140127#endif
141- }
128+ }
142129
143- argc = 2 ;
144- argv[ 1 ] = names;
130+ argv[ 1 ] = names ;
131+ }
145132 break ;
146- }
147133
148134 default :
149135 assert (0 && " Unhandled eio response" );
0 commit comments