Commit 593a3584 authored by Reinhard Biegel's avatar Reinhard Biegel
Browse files

feat(Core): More verbose directory check messages

parent e1ced3fa
Loading
Loading
Loading
Loading
+37 −12
Original line number Diff line number Diff line
@@ -45,11 +45,19 @@ static void SetupLogging(const std::filesystem::path& executionPath,
                         LogLevel logLevel,
                         const std::string& logFileString);

//-----------------------------------------------------------------------------
//! \brief  Check several parameters of a directory
//! \param  directory
//! \param  prefix   for readable logging in case of an error
//! \return true, if everything directory exists and really is a directory, false otherwise
//-----------------------------------------------------------------------------
static bool CheckDir(const std::string& directory, const std::string& prefix);

//-----------------------------------------------------------------------------
//! \brief  Check several parameters of a readable directory
//! \param  directory
//! \param  prefix   for readable logging in case of an error
//! \return true, if everything is allright
//! \return true, if \c CheckDir returns true and the directory is readable, false otherwise
//-----------------------------------------------------------------------------
static bool CheckReadableDir(const std::string& directory, const std::string& prefix);

@@ -57,7 +65,7 @@ static bool CheckReadableDir(const std::string& directory, const std::string& pr
//! \brief  Check several parameters of a writeable directory
//! \param  directory
//! \param  prefix   for readable logging in case of an error
//! \return true, if everything is allright
//! \return true, if \c CheckDir returns true and the directory is writable, false otherwise
//-----------------------------------------------------------------------------
static bool CheckWritableDir(const std::string& directory, const std::string& prefix);

@@ -265,32 +273,49 @@ bool PrepareDirectoriesAndLogging(const openpass::core::Directories& directories
  return statusConfig && statusLibrary && statusOutput;
}

bool CheckReadableDir(const std::string& directory, const std::string& prefix)
bool CheckDir(const std::string& directory, const std::string& prefix)
{
  namespace fs = std::filesystem;

  const fs::path dir(directory);

  if (!fs::exists(dir) || !fs::is_directory(dir) || access(directory.c_str(), R_OK))
  if (!fs::exists(dir))
  {
    LOG_INTERN(LogLevel::Error) << prefix << " directory " << directory
                                << " does not exist, is not a directory, or is not readable";
    LOG_INTERN(LogLevel::Error) << prefix << " directory " << directory << " does not exist";
    return false;
  }

  if (!fs::is_directory(dir))
  {
    LOG_INTERN(LogLevel::Error) << prefix << " directory " << directory << " is not a directory";
    return false;
  }

  return true;
}

bool CheckWritableDir(const std::string& directory, const std::string& prefix)
bool CheckReadableDir(const std::string& directory, const std::string& prefix)
{
  namespace fs = std::filesystem;
  CheckDir(directory, prefix);

  const fs::path dir(directory);
  if (int ret = access(directory.c_str(), R_OK))
  {
    LOG_INTERN(LogLevel::Error) << prefix << " directory " << directory << " is not readable (code " << ret << ")";
    return false;
  }

  return true;
}

bool CheckWritableDir(const std::string& directory, const std::string& prefix)
{
  CheckDir(directory, prefix);

  if (!fs::exists(dir) || !fs::is_directory(dir) || access(directory.c_str(), W_OK))
  if (int ret = access(directory.c_str(), W_OK))
  {
    LOG_INTERN(LogLevel::Error) << prefix << " directory " << directory
                                << " does not exist, is not a directory, or is not writable";
    LOG_INTERN(LogLevel::Error) << prefix << " directory " << directory << " is not writable (code " << ret << ")";
    return false;
  }

  return true;
}