1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <unistd.h> 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "search_path.h" 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "options.h" 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <string.h> 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifdef HAVE_MS_C_RUNTIME 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <io.h> 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistatic vector<string> g_importPaths; 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskivoid 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiset_import_paths(const vector<string>& importPaths) 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski g_importPaths = importPaths; 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskichar* 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskifind_import_file(const char* given) 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string expected = given; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int N = expected.length(); 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski for (int i=0; i<N; i++) { 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski char c = expected[i]; 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (c == '.') { 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski expected[i] = OS_PATH_SEPARATOR; 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski expected += ".aidl"; 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski vector<string>& paths = g_importPaths; 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski for (vector<string>::iterator it=paths.begin(); it!=paths.end(); it++) { 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski string f = *it; 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (f.size() == 0) { 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski f = "."; 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski f += OS_PATH_SEPARATOR; 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski else if (f[f.size()-1] != OS_PATH_SEPARATOR) { 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski f += OS_PATH_SEPARATOR; 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski f.append(expected); 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#ifdef HAVE_MS_C_RUNTIME 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /* check that the file exists and is not write-only */ 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (0 == _access(f.c_str(), 0) && /* mode 0=exist */ 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 0 == _access(f.c_str(), 4) ) { /* mode 4=readable */ 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#else 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (0 == access(f.c_str(), R_OK)) { 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return strdup(f.c_str()); 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return NULL; 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 58