From c84b61a6d80eee58fa0f63b207b03affba1e4ca1 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Sun, 31 May 2020 16:27:37 +0100 Subject: [PATCH] Ensure that the tmp environment (e.g. RECOLL_TMPDIR) is used on Windows. --- src/qtgui/rclm_idx.cpp | 29 +++++++++++++++++++++++------ src/utils/rclutil.cpp | 20 +++++++------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/qtgui/rclm_idx.cpp b/src/qtgui/rclm_idx.cpp index 78ff6002..2ee55a59 100644 --- a/src/qtgui/rclm_idx.cpp +++ b/src/qtgui/rclm_idx.cpp @@ -233,13 +233,20 @@ bool RclMain::maybeArgsToFile(vector& args) TempFile temp(""); m_idxargstmp = rememberTempFile(temp); } + LOGDEB0("RclMain::maybeArgsToFile: temp file name [" << + m_idxargstmp->filename() << "]\n"); bool hasrclindex = (args[0] == "recollindex"); if (hasrclindex) { args.erase(args.begin()); } string s; stringsToString(args, s); - fstream fout(m_idxargstmp->filename(), ios::out|ios::trunc); + fstream fout; + if (!path_open(m_idxargstmp->filename(), ios::out|ios::trunc, fout)) { + QMessageBox::warning( + 0, "Recoll", tr("Could not start recollindex (temp file error)")); + return false; + } fout << s; fout.close(); if (hasrclindex) { @@ -258,7 +265,9 @@ bool RclMain::checkIdxPaths() { string badpaths; vector args{"recollindex", "-c", theconfig->getConfDir(), "-E"}; - maybeArgsToFile(args); + if (!maybeArgsToFile(args)) { + return false; + } ExecCmd::backtick(args, badpaths); if (!badpaths.empty()) { int rep = QMessageBox::warning( @@ -328,7 +337,9 @@ void RclMain::toggleIndexing() args.push_back(m_idxreasontmp->filename()); } m_idxproc = new ExecCmd; - maybeArgsToFile(args); + if (!maybeArgsToFile(args)) { + return; + } m_idxproc->startExec("recollindex", args, false, false); } break; @@ -434,7 +445,9 @@ void RclMain::rebuildIndex() args.push_back(m_idxreasontmp->filename()); } m_idxproc = new ExecCmd; - maybeArgsToFile(args); + if (!maybeArgsToFile(args)) { + return; + } m_idxproc->startExec("recollindex", args, false, false); } } @@ -561,7 +574,9 @@ void RclMain::specialIndex() args.push_back(top); } m_idxproc = new ExecCmd; - maybeArgsToFile(args); + if (!maybeArgsToFile(args)) { + return; + } LOGINFO("specialIndex: exec: " << execToString("recollindex", args) <startExec("recollindex", args, false, false); } @@ -584,7 +599,9 @@ void RclMain::updateIdxForDocs(vector& docs) } args.insert(args.end(), paths.begin(), paths.end()); m_idxproc = new ExecCmd; - maybeArgsToFile(args); + if (!maybeArgsToFile(args)) { + return; + } m_idxproc->startExec("recollindex", args, false, false); // Call periodic100 to update the menu entries states periodic100(); diff --git a/src/utils/rclutil.cpp b/src/utils/rclutil.cpp index 39485947..de25bc55 100644 --- a/src/utils/rclutil.cpp +++ b/src/utils/rclutil.cpp @@ -129,7 +129,8 @@ static const string& path_wingetrcltmpdir() static bool path_gettempfilename(string& filename, string&) { - string tdir = path_wingetrcltmpdir(); + string tdir = tmplocation(); + LOGDEB0("path_gettempfilename: tdir: [" << tdir << "]\n"); wchar_t dbuf[MAX_PATH + 1]; utf8towchar(tdir, dbuf, MAX_PATH); @@ -145,6 +146,7 @@ static bool path_gettempfilename(string& filename, string&) LOGDEB1("path_wingettempfilename: DeleteFile " << filename << " Ok\n"); } path_slashize(filename); + LOGDEB1("path_gettempfilename: filename: [" << filename << "]\n"); return true; } @@ -312,9 +314,7 @@ const string& tmplocation() } if (tmpdir == 0) { #ifdef _WIN32 - wchar_t bufw[MAX_PATH + 1]; - GetTempPathW(MAX_PATH + 1, bufw); - wchartoutf8(bufw, stmpdir); + stmpdir = path_wingetrcltmpdir(); #else stmpdir = "/tmp"; #endif @@ -444,24 +444,18 @@ TempFile::Internal::Internal(const string& suffix) return; } m_filename += suffix; - LOGDEB1("TempFile: filename: " << m_filename << endl); - int fd1 = open(m_filename.c_str(), O_CREAT | O_EXCL, 0600); - if (fd1 < 0) { + std::fstream fout; + if (!path_open(m_filename, ios::out|ios::trunc, fout)) { m_reason = string("Open/create error. errno : ") + lltodecstr(errno) + " file name: " + m_filename; + LOGSYSERR("Tempfile::Internal::Internal", "open/create", m_filename); m_filename.erase(); - } else { - close(fd1); } } const std::string& TempFile::rcltmpdir() { -#ifdef _WIN32 - return path_wingetrcltmpdir(); -#else return tmplocation(); -#endif } #ifdef _WIN32