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; }
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; }
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(); }
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; }
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; } }