_assert(pthread_create(&client->thread_, NULL, &OnClient, client) == 0);
}
-extern "C" void CYHandleServer(pid_t pid) {
+extern "C" void CYHandleServer(pid_t pid, char *data, size_t size) {
CYInitializeDynamic();
int socket(_syscall(::socket(PF_UNIX, SOCK_STREAM, 0))); try {
#include <mach-o/dyld.h>
-extern "C" void CYHandleServer(pid_t pid) {
+extern "C" void CYHandleServer(pid_t pid, char *data, size_t size) {
Dl_info addr;
if (dladdr(reinterpret_cast<void *>(&CYHandleServer), &addr) == 0)
return;
void *handle(dlopen(library, RTLD_LOCAL | RTLD_LAZY));
if (handle == NULL) {
- syslog(LOG_ERR, "dlopen() -> %s", dlerror());
+ strlcpy(data, dlerror(), size);
return;
}
void *symbol(dlsym(handle, "CYHandleServer"));
- if (symbol == NULL)
+ if (symbol == NULL) {
+ strlcpy(data, dlerror(), size);
return;
+ }
reinterpret_cast<void (*)(pid_t)>(symbol)(pid);
}
void *(*$dlsym)(void *, const char *);
cyset($dlsym, "_dlsym", dyld);
- void (*CYHandleServer)(pid_t);
- CYHandleServer = reinterpret_cast<void (*)(pid_t)>($dlsym(handle, "CYHandleServer"));
+ void (*CYHandleServer)(pid_t, char *, size_t);
+ CYHandleServer = reinterpret_cast<void (*)(pid_t, char *, size_t)>($dlsym(handle, "CYHandleServer"));
if (CYHandleServer == NULL) {
$strlcpy(baton->error, $dlerror(), sizeof(baton->error));
return NULL;
}
- CYHandleServer(baton->pid);
+ CYHandleServer(baton->pid, baton->error, sizeof(baton->error));
return NULL;
}