void NamesList::SetCurDir(const wchar_t *Dir) { if (StrCmpI(strCurrentDir,Dir) || !TestCurrentDirectory(Dir)) { strCurrentDir = Dir; PrepareDiskPath(strCurrentDir); } }
BOOL FarChDir(const string& NewDir, BOOL ChangeDir) { if (NewDir.empty()) return FALSE; BOOL rc=FALSE; string Drive(L"=A:"); string strCurDir; // если указана только буква диска, то путь возьмем из переменной if (NewDir.size() == 2 && NewDir[1]==L':') { Drive[1] = ToUpper(NewDir[0]); if (!api::env::get_variable(Drive, strCurDir)) { strCurDir = NewDir; AddEndSlash(strCurDir); ReplaceSlashToBSlash(strCurDir); } if (ChangeDir) { rc=api::SetCurrentDirectory(strCurDir); } } else { if (ChangeDir) { strCurDir = NewDir; if (strCurDir == L"\\") api::GetCurrentDirectory(strCurDir); // здесь берем корень ReplaceSlashToBSlash(strCurDir); ConvertNameToFull(NewDir,strCurDir); PrepareDiskPath(strCurDir,false); // resolving not needed, very slow rc=api::SetCurrentDirectory(strCurDir); } } if (rc || !ChangeDir) { if ((!ChangeDir || api::GetCurrentDirectory(strCurDir)) && strCurDir.size() > 1 && strCurDir[1]==L':') { Drive[1] = ToUpper(strCurDir[0]); api::env::set_variable(Drive, strCurDir); } } return rc; }
void Panel::InitCurDir(const string& CurDir) { if (!equal_icase(m_CurDir, CurDir) || !equal_icase(os::fs::GetCurrentDirectory(), CurDir)) { m_CurDir = CurDir; if (m_PanelMode != panel_mode::PLUGIN_PANEL) { PrepareDiskPath(m_CurDir); if(!IsRootPath(m_CurDir)) { DeleteEndSlash(m_CurDir); } } } }
static void SetupFarPath(int argc, char **argv) { InitCurrentDirectory(); char buf[PATH_MAX + 1] = {}; ssize_t buf_sz = readlink("/proc/self/exe", buf, sizeof(buf) - 1); if (buf_sz <= 0 || buf_sz >= (ssize_t)sizeof(buf) - 1 || buf[0] != GOOD_SLASH) { if (argv[0][0]!=GOOD_SLASH) { apiGetCurrentDirectory(g_strFarModuleName); if (argv[0][0]=='.') { g_strFarModuleName+= argv[0] + 1; } else { g_strFarModuleName+= GOOD_SLASH; g_strFarModuleName+= argv[0]; } } else g_strFarModuleName = argv[0]; } else { buf[buf_sz] = 0; g_strFarModuleName = buf; } FARString dir = g_strFarModuleName; CutToSlash(dir, true); const wchar_t *last_element = PointToName(dir); if (last_element && wcscmp(last_element, L"bin") == 0) { CutToSlash(dir, false); SetPathTranslationPrefix(dir); } fprintf(stderr, "argv[0]='%s' g_strFarModuleName='%ls' translation_prefix='%ls'\n", argv[0], g_strFarModuleName.CPtr(), GetPathTranslationPrefix()); PrepareDiskPath(g_strFarModuleName); }