Exemplo n.º 1
0
BOOL CInstall::StartMenuBegin()
{
    m_fLogNew = MakeTemp(m_szShellNew);
    if (!m_fLogNew) {
        AddMessage("Failed to create ShellNew temporary file\n");
        return FALSE;
    }

    m_fLogOld = MakeTemp(m_szShellOld);
    if (!m_fLogOld) {
        AddMessage("Failed to create ShellNew temporary file\n");
        return FALSE;
    }

    // make folder if needed
    char szLink[MAXSTR];
    strcpy(szLink, m_szPrograms);
    strcat(szLink, "\\");
    strcat(szLink, m_szTargetGroup);
    if (chdir(szLink) != 0) {
        if (mkdir(szLink) != 0) {
            char buf[MAXSTR+64];
            wsprintf(buf, "Couldn't make Programs folder \042%s'042", szLink);
            AddMessage(buf);
            StartMenuEnd();
            return FALSE;
        }
    }
    else {
        fprintf(m_fLogOld, "Group=%s\n\n", szLink);
    }
    fprintf(m_fLogNew, "Group=%s\n\n", szLink);

    return TRUE;
}
Exemplo n.º 2
0
BOOL CInstall::UpdateRegistryBegin()
{
    const char regheader[]="REGEDIT4\n";
    m_fLogNew = MakeTemp(m_szRegistryNew);
    if (!m_fLogNew) {
        AddMessage("Failed to create RegistryNew temporary file\n");
        return FALSE;
    }
    fputs(regheader, m_fLogNew);

    m_fLogOld = MakeTemp(m_szRegistryOld);
    if (!m_fLogOld) {
        AddMessage("Failed to create RegistryOld temporary file\n");
        UpdateRegistryEnd();
        return FALSE;
    }
    fputs(regheader, m_fLogOld);

    return TRUE;
}
Exemplo n.º 3
0
void Tempfile::AllocTempfile()
{
  len = strlen(tempdir) + 1 + plen + 1 + 6 + 1;
  file = new char[len];

  if (prefix)
    simple_snprintf(file, len, "%s.%s-XXXXXX", tempdir, prefix);
  else
    simple_snprintf(file, len, "%s.XXXXXX", tempdir);

  MakeTemp();
}
Exemplo n.º 4
0
BOOL CInstall::InstallFiles(BOOL bNoCopy, BOOL *pbQuit)
{
    char szLogNew[MAXSTR];

    AddMessage(bNoCopy ? "Checking" : "Copying");
    AddMessage(" files listed in ");
    AddMessage(m_szFileList);
    AddMessage("\n");

    // Open list of files
    SetCurrentDirectory(m_szSourceDir);
    FILE *f = fopen(m_szFileList, "r");
    if (f == (FILE *)NULL) {
        AddMessage("Failed to open \042");
        AddMessage(m_szFileList);
        AddMessage("\042\n");
        return FALSE;
    }

    // skip application and directory name
    fgets(szLogNew, sizeof(szLogNew), f);
    fgets(szLogNew, sizeof(szLogNew), f);

    // Create target log

    m_fLogNew = MakeTemp(m_szFileNew);
    if (!m_fLogNew) {
        AddMessage("Failed to create FileNew temporary file\n");
        return FALSE;
    }

    // Copy files
    char line[MAXSTR];
    while (fgets(line, sizeof(line), f) != (char *)NULL) {
        if (*pbQuit)
            return FALSE;
        if (*line)
            line[strlen(line)-1] = '\0';
        if (!InstallFile(line, bNoCopy)) {
            fclose(f);
            fclose(m_fLogNew);
            return FALSE;
        }
    }
    fclose(f);
    fclose(m_fLogNew);
    m_fLogNew = NULL;
    return TRUE;
}
Exemplo n.º 5
0
bool Panel::MakeListFile(string& ListFileName, bool ShortNames, string_view const Modifers)
{
	uintptr_t CodePage = CP_OEMCP;

	if (!Modifers.empty())
	{
		if (contains(Modifers, L'A')) // ANSI
		{
			CodePage = CP_ACP;
		}
		else if (contains(Modifers, L'U')) // UTF8
		{
			CodePage = CP_UTF8;
		}
		else if (contains(Modifers, L'W')) // UTF16LE
		{
			CodePage = CP_UNICODE;
		}
	}

	const auto& transform = [&](string& strFileName)
	{
		if (!Modifers.empty())
		{
			if (contains(Modifers, L'F') && PointToName(strFileName).size() == strFileName.size()) // 'F' - использовать полный путь; //BUGBUG ?
			{
				strFileName = path::join(ShortNames ? ConvertNameToShort(m_CurDir) : m_CurDir, strFileName); //BUGBUG ?
			}

			if (contains(Modifers, L'Q')) // 'Q' - заключать имена с пробелами в кавычки;
				QuoteSpaceOnly(strFileName);

			if (contains(Modifers, L'S')) // 'S' - использовать '/' вместо '\' в путях файлов;
			{
				ReplaceBackslashToSlash(strFileName);
			}
		}
	};

	try
	{
		ListFileName = MakeTemp();
		if (const auto ListFile = os::fs::file(ListFileName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, CREATE_ALWAYS))
		{
			os::fs::filebuf StreamBuffer(ListFile, std::ios::out);
			std::ostream Stream(&StreamBuffer);
			Stream.exceptions(Stream.badbit | Stream.failbit);
			encoding::writer Writer(Stream, CodePage);

			for (const auto& i: enum_selected())
			{
				auto Name = ShortNames? i.AlternateFileName() : i.FileName;

				transform(Name);

				Writer.write(Name);
				Writer.write(L"\r\n"sv);
			}

			Stream.flush();
		}
		else
		{
			throw MAKE_FAR_EXCEPTION(msg(lng::MCannotCreateListTemp));
		}

		return true;
	}
	catch (const far_exception& e)
	{
		os::fs::delete_file(ListFileName);
		Message(MSG_WARNING, e.get_error_state(),
			msg(lng::MError),
			{
				msg(lng::MCannotCreateListFile),
				e.get_message()
			},
			{ lng::MOk });
		return false;
	}
}