OSDN Git Service

GLSurfaceView: Be less picky about EGLConfig alpha sizes
[android-x86/frameworks-base.git] / tools / aidl / search_path.cpp
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