1 #include <unistd.h> 2 #include "search_path.h" 3 #include "options.h" 4 #include <string.h> 5 6 #ifdef HAVE_MS_C_RUNTIME 7 #include <io.h> 8 #endif 9 10 static vector<string> g_importPaths; 11 12 void 13 set_import_paths(const vector<string>& importPaths) 14 { 15 g_importPaths = importPaths; 16 } 17 18 char* 19 find_import_file(const char* given) 20 { 21 string expected = given; 22 23 int N = expected.length(); 24 for (int i=0; i<N; i++) { 25 char c = expected[i]; 26 if (c == '.') { 27 expected[i] = OS_PATH_SEPARATOR; 28 } 29 } 30 expected += ".aidl"; 31 32 vector<string>& paths = g_importPaths; 33 for (vector<string>::iterator it=paths.begin(); it!=paths.end(); it++) { 34 string f = *it; 35 if (f.size() == 0) { 36 f = "."; 37 f += OS_PATH_SEPARATOR; 38 } 39 else if (f[f.size()-1] != OS_PATH_SEPARATOR) { 40 f += OS_PATH_SEPARATOR; 41 } 42 f.append(expected); 43 44 #ifdef HAVE_MS_C_RUNTIME 45 /* check that the file exists and is not write-only */ 46 if (0 == _access(f.c_str(), 0) && /* mode 0=exist */ 47 0 == _access(f.c_str(), 4) ) { /* mode 4=readable */ 48 #else 49 if (0 == access(f.c_str(), R_OK)) { 50 #endif 51 return strdup(f.c_str()); 52 } 53 } 54 55 return NULL; 56 } 57 58