| The Android Open Source Project | 46c012c | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 1 | #include <unistd.h> | 
|  | 2 | #include "search_path.h" | 
|  | 3 | #include "options.h" | 
| The Android Open Source Project | bcaa86d | 2009-01-09 17:51:23 -0800 | [diff] [blame] | 4 | #include <string.h> | 
| The Android Open Source Project | 46c012c | 2008-10-21 07:00:00 -0700 | [diff] [blame] | 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 |  |