#include #include int main(int argc, char *argv[]) { OSStatus error; CFURLRef alarm_application_url; error = LSFindApplicationForInfo( kLSUnknownCreator, CFSTR("com.onesadcookie.alarm"), NULL, NULL, &alarm_application_url); if (error != noErr || alarm_application_url == NULL) { printf("Can't find Alarm application\n"); return EXIT_FAILURE; } CFBundleRef alarm_application_bundle = CFBundleCreate(kCFAllocatorDefault, alarm_application_url); if (alarm_application_bundle == NULL) { printf("Alarm application isn't a bundle\n"); return EXIT_FAILURE; } CFURLRef alarm_executable_url = CFBundleCopyExecutableURL(alarm_application_bundle); if (alarm_executable_url == NULL) { printf("Alarm application bundle has no executable\n"); return EXIT_FAILURE; } char path[PATH_MAX]; if (!CFURLGetFileSystemRepresentation(alarm_executable_url, TRUE, (UInt8*)path, (CFIndex)PATH_MAX)) { printf("Can't turn Alarm executable URL into file system path\n"); return EXIT_FAILURE; } if (daemon(TRUE, TRUE) != 0) { printf("Can't detach alarm application from terminal\n"); return EXIT_FAILURE; } if (execv(path, argv) == -1) { perror("Can't execute alarm application"); return EXIT_FAILURE; } return EXIT_SUCCESS; }