| #include <CoreFoundation/CoreFoundation.h> | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <unistd.h> | |
| int fileExists(char* filename) | |
| { | |
| #ifndef R_OK | |
| # define R_OK 04 | |
| #endif | |
| if (access(filename, R_OK) != 0) { | |
| printf("Cannot find file: %s\n", filename); | |
| return 0; | |
| } | |
| return 1; | |
| } | |
| int findBundleFile(char* exec, const char* file) | |
| { | |
| int res; | |
| char* nexec = strdup(exec); | |
| size_t fpathlen = strlen(nexec) + 1 + strlen(file); | |
| char* fpath = (char*)malloc(fpathlen); | |
| int cc; | |
| int cnt = 0; | |
| printf("Process executable name: %s\n", exec); | |
| // Remove the executable name and directory name | |
| for (cc = strlen(nexec) - 1; cc > 0; cc--) { | |
| if (nexec[cc] == '/') { | |
| nexec[cc] = 0; | |
| if (cnt == 1) { | |
| break; | |
| } | |
| cnt++; | |
| } | |
| } | |
| printf("Process executable path: %s\n", nexec); | |
| snprintf(fpath, fpathlen, "%s/%s", nexec, file); | |
| printf("Check for file: %s\n", fpath); | |
| res = fileExists(fpath); | |
| free(nexec); | |
| free(fpath); | |
| return res; | |
| } | |
| int foo(char* exec) | |
| { | |
| // Call a CoreFoundation function... | |
| // | |
| CFBundleRef br = CFBundleGetMainBundle(); | |
| (void)br; | |
| int res1 = findBundleFile(exec, "Resources/randomResourceFile.plist"); | |
| int res2 = findBundleFile(exec, "Other/SomeRandomFile.txt"); | |
| int res3 = findBundleFile(exec, "Other/README.rst"); | |
| if (!res1 || !res2 || !res3) { | |
| return 1; | |
| } | |
| return 0; | |
| } |