#import "Launcher.h"

#define FOREVER ((CFTimeInterval) 1e20)

static void timer_empty(CFRunLoopTimerRef timer, void *info) {
}

static void parkRunLoop() {
    CFRunLoopTimerRef t = CFRunLoopTimerCreate(kCFAllocatorDefault, FOREVER, (CFTimeInterval)0.0, 0, 0, timer_empty, NULL);
    CFRunLoopAddTimer(CFRunLoopGetCurrent(), t, kCFRunLoopDefaultMode);
    CFRelease(t);

    SInt32 result;
    do {
        result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, FOREVER, false);
    } while (result != kCFRunLoopRunFinished);
}

static void makeSameStackSize(NSThread *thread) {
    struct rlimit l;
    int err = getrlimit(RLIMIT_STACK, &l);
    if (err == ERR_SUCCESS && l.rlim_cur > 0) {
        thread.stackSize = (NSUInteger) l.rlim_cur;
    }
}

static void launchInNewThread(Launcher *launcher) {
    NSThread *thread = [[[NSThread alloc] initWithTarget:launcher selector:@selector(launch) object:nil] autorelease];
    makeSameStackSize(thread);
    [thread start];
}

int main(int argc, char *argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    launchInNewThread([[[Launcher alloc] initWithArgc:argc argv:argv] autorelease]);
    parkRunLoop();

    [pool release];
    return 0;
}
