diff --git a/_ffi.cc b/_ffi.cc index a6d92141..de895a6a 100644 --- a/_ffi.cc +++ b/_ffi.cc @@ -129,7 +129,7 @@ Handle Pointer::New(const Arguments& args) { HandleScope scope; Pointer *self = new Pointer(NULL); - + if (args.Length() == 1 && args[0]->IsNumber()) { unsigned int sz = args[0]->Uint32Value(); self->Alloc(sz); @@ -675,11 +675,13 @@ int FFI::AsyncFFICall(eio_req *req) int FFI::FinishAsyncFFICall(eio_req *req) { AsyncCallParams *p = (AsyncCallParams *)req->data; - Local argv[0]; + Local argv[1]; + argv[0] = Local::New(String::New("success")); + // emit a success event Local emit = Local::Cast(p->emitter->Get(String::NewSymbol("emit"))); - emit->Call(p->emitter, 0, argv); + emit->Call(p->emitter, 1, argv); // unref the event loop (ref'd in FFICall) ev_unref(EV_DEFAULT_UC); @@ -941,7 +943,7 @@ void CallbackInfo::Invoke(ffi_cif *cif, void *retval, void **parameters, void *u // send a message to our main thread to wake up the WatchCallback loop ev_async_send(EV_DEFAULT_UC_ &g_async); - + // wait for signal from calling thread inv->WaitForExecution(); diff --git a/node-ffi.js b/node-ffi.js index 3e9902e7..25b3f168 100644 --- a/node-ffi.js +++ b/node-ffi.js @@ -14,7 +14,7 @@ FFI.TYPE_TO_POINTER_METHOD_MAP = { "int32": "Int32", "uint32": "UInt32", "int64": "Int64", - "uin64": "UInt64", + "uint64": "UInt64", "float": "Float", "double": "Double", "string": "CString", @@ -23,7 +23,8 @@ FFI.TYPE_TO_POINTER_METHOD_MAP = { FFI.PLATFORM_LIBRARY_EXTENSIONS = { "linux2": ".so", - "darwin": ".dylib" + "darwin": ".dylib", + "sunos": ".so", }; // create fast dispatch tables for type calls @@ -419,4 +420,4 @@ FFI.errno = function() { // Export Everything for (var k in FFI) { exports[k] = FFI[k]; } -}()); \ No newline at end of file +}()); diff --git a/sqlite-example.js b/sqlite-example.js index 29849941..6f7f2b62 100644 --- a/sqlite-example.js +++ b/sqlite-example.js @@ -1,4 +1,4 @@ -var FFI = require("./ffi"); +var FFI = require("./node-ffi"); var sys = require("sys"); var SQLite3 = new FFI.Library("libsqlite3", { @@ -48,7 +48,7 @@ var callback = new FFI.Callback(["int32", ["pointer", "int32", "pointer", "point var fin = false; -SQLite3Async.sqlite3_exec(dbh, "SELECT * FROM foo;", callback.getPointer(), null, null).addCallback(function(ret) { +SQLite3Async.sqlite3_exec(dbh, "SELECT * FROM foo;", callback.getPointer(), null, null).on("success", function(ret) { sys.puts("Total Rows: " + rowCount); sys.puts("Changes: " + SQLite3.sqlite3_changes(dbh)); sys.puts("Closing..."); @@ -56,4 +56,4 @@ SQLite3Async.sqlite3_exec(dbh, "SELECT * FROM foo;", callback.getPointer(), null SQLite3.sqlite3_close(dbh); }); -setTimeout(2000, function() { }); \ No newline at end of file +setTimeout(2000, function() { }); diff --git a/test.js b/test.js index 74c957d1..1c654d95 100644 --- a/test.js +++ b/test.js @@ -323,27 +323,12 @@ var clz = new FFI.CallbackInfo(cifPtr.getPointer(), function(result, args) { var callMyTestClosure = FFI.ForeignFunction.build(clz.pointer, "int32", [ "int32" ]); callMyTestClosure(1); +assert.equal(1, closureCalled); callMyTestClosure(1); assert.equal(2, closureCalled); /////////////////////// -var asyncClosureCalled = 0; -var cifPtr = new FFI.CIF("int32", [ "int32" ]); -var clz = new FFI.CallbackInfo(cifPtr.getPointer(), function(result, args) { - asyncClosureCalled++; - result.putInt32(1234); -}); - - -var callMyTestClosure = FFI.ForeignFunction.build(clz.pointer, "int32", [ "int32" ], true); - -callMyTestClosure(1).on("success", function(res) { - assert.equal(1234, res); -}); - -/////////////////////// - var callback = new FFI.Callback(["int32", ["int32"]], function(inValue) { return Math.abs(inValue); }); @@ -371,6 +356,7 @@ var libmCeilAsyncCallExecuted = false; var libm = new FFI.Library("libm", { "ceil": [ "double", [ "double" ], {"async": true } ] }); assert.ok(libm instanceof FFI.Library); assert.ok(libm.ceil instanceof Function); + libm.ceil(1.5).on("success", function(res) { libmCeilAsyncCallExecuted = true; assert.equal(1, res); @@ -390,8 +376,7 @@ assert.equal(2, FFI.errno()); setTimeout(function() { assert.ok(asyncAbsCallExecuted); assert.ok(libmCeilAsyncCallExecuted); - assert.equal(1, asyncClosureCalled); sys.puts("Tests pass!"); -}, 2000); +}, 250); sys.puts("Heap increased by " + ((process.memoryUsage()["rss"] - rss) / 1024) + " KB"); diff --git a/wscript b/wscript index 20c11d35..5c9b7674 100644 --- a/wscript +++ b/wscript @@ -18,8 +18,10 @@ def configure(conf): conf.env['USE_DEBUG'] = Options.options.debug if not conf.check(lib='ffi'): - fatal("libffi not found.") + if not conf.check(lib="ffi", libpath=['/usr/local/lib', '/opt/local/lib'], uselib_store="FFI"): + fatal("libffi not found.") + conf.env.append_value("CPPPATH_FFI", "/opt/local/include") conf.env.append_value("LIB_FFI", "ffi") conf.env.append_value("LIB_DL", "dl")