#include #include #include #include #include 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); char* fpath = (char*)malloc(strlen(exec) + 100); 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); sprintf(fpath, "%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; }