Ejemplo n.º 1
0
void NamesList::SetCurDir(const wchar_t *Dir)
{
	if (StrCmpI(strCurrentDir,Dir) || !TestCurrentDirectory(Dir))
	{
		strCurrentDir = Dir;
		PrepareDiskPath(strCurrentDir);
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
			}
		}
	}
}
Ejemplo n.º 4
0
Archivo: main.cpp Proyecto: elfmz/far2l
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);
}