int (*pthread_join)(pthread_t, void **);
void *(*dlopen)(const char *, int);
+ char *(*dlerror)();
void *(*dlsym)(void *, const char *);
mach_port_t (*mach_thread_self)();
console += -framework Foundation
library += -install_name /usr/lib/libcycript.$(dll)
library += -framework Foundation
-library += -framework JavaScriptCore
+console += -framework JavaScriptCore
# XXX: do I just need WebCore?
-library += -framework WebKit
+console += -framework WebKit
+library += -undefined dynamic_lookup
library += -liconv
flags += -I/usr/include/ffi
apr_config := /usr/bin/apr-1-config
baton->pthread_join = &pthread_join;
baton->dlopen = &dlopen;
+ baton->dlerror = &dlerror;
baton->dlsym = &dlsym;
baton->mach_thread_self = &mach_thread_self;
template <typename Type_>
static _finline void dlset(Baton *baton, Type_ &function, const char *name, void *handle = RTLD_DEFAULT) {
function = reinterpret_cast<Type_>(baton->dlsym(handle, name));
+ if (function == NULL)
+ baton->dlerror();
}
void *Routine(void *arg) {
dlset(baton, dlopen, "dlopen");
void *handle(dlopen(baton->library, RTLD_LAZY | RTLD_LOCAL));
+ if (handle == NULL) {
+ baton->dlerror();
+ return NULL;
+ }
void (*CYHandleServer)(pid_t);
dlset(baton, CYHandleServer, "CYHandleServer", handle);
CYHandleServer(baton->pid);
- return arg;
+ return NULL;
}
static void $bzero(void *data, size_t size) {