tb_size_t tb_directory_home(tb_char_t* path, tb_size_t maxn) { // check tb_assert_and_check_return_val(path && maxn, 0); // get the home directory tb_size_t size = 0; if (!(size = tb_environment_first("XDG_CONFIG_HOME", path, maxn))) size = tb_environment_first("HOME", path, maxn); // ok return size; }
static tb_bool_t xm_machine_main_get_program_directory(xm_machine_impl_t* impl, tb_char_t* path, tb_size_t maxn) { // check tb_assert_and_check_return_val(impl && path && maxn, tb_false); // done tb_bool_t ok = tb_false; do { #ifdef TB_CONFIG_OS_WINDOWS // get the program directory tb_size_t size = GetModuleFileName(tb_null, path, maxn); tb_assert_and_check_break(size < maxn); // end path[size] = '\0'; // get the directory while (size-- > 0) { if (path[size] == '\\') { path[size] = '\0'; break; } } #else // get it from the environment variable tb_char_t data[TB_PATH_MAXN] = {0}; if (!tb_environment_first("XMAKE_PROGRAM_DIR", data, sizeof(data))) { // error tb_printf("error: please set XMAKE_PROGRAM_DIR first!\n"); break; } // get the full path if (!tb_path_absolute(data, path, maxn)) break; #endif // trace tb_trace_d("program: %s", path); // save the directory to the global variable: _PROGRAM_DIR lua_pushstring(impl->lua, path); lua_setglobal(impl->lua, "_PROGRAM_DIR"); // ok ok = tb_true; } while (0); // ok? return ok; }
static tb_bool_t xm_machine_main_get_project_directory(xm_machine_impl_t* impl, tb_char_t* path, tb_size_t maxn) { // check tb_assert_and_check_return_val(impl && path && maxn, tb_false); // done tb_bool_t ok = tb_false; do { // attempt to get it from the environment variable first tb_char_t data[TB_PATH_MAXN] = {0}; if ( !tb_environment_first("XMAKE_PROJECT_DIR", data, sizeof(data)) || !tb_path_absolute(data, path, maxn)) { // get it from the current directory if (!tb_directory_current(path, maxn)) break; } // trace tb_trace_d("project: %s", path); // save the directory to the global variable: _PROJECT_DIR lua_pushstring(impl->lua, path); lua_setglobal(impl->lua, "_PROJECT_DIR"); // ok ok = tb_true; } while (0); // failed? if (!ok) tb_printf("error: not found the project directory!\n"); // ok? return ok; }