From 3c628659bc891c4286444cac60f8e0601abcb3e4 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Fri, 10 Jul 2020 15:28:26 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=B2=D1=8B=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=83=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/myx/filesystem/paths.cpp | 56 +++++++++------ src/myx/filesystem/paths.hpp | 127 +++++++++++++++++++---------------- 2 files changed, 106 insertions(+), 77 deletions(-) diff --git a/src/myx/filesystem/paths.cpp b/src/myx/filesystem/paths.cpp index 9437a2c..c4d4677 100644 --- a/src/myx/filesystem/paths.cpp +++ b/src/myx/filesystem/paths.cpp @@ -13,7 +13,14 @@ namespace myx { namespace filesystem { -MYXLIB_INLINE Paths::Paths() = default; +MYXLIB_INLINE Paths::Paths() +{ + QFileInfo procSelfExe( QStringLiteral( "/proc/self/exe" ) ); + QFileInfo currentExecutable = procSelfExe.canonicalFilePath(); + m_executableName = currentExecutable.fileName(); + m_executableFilePath = currentExecutable.absoluteFilePath(); + m_executableDirectory = currentExecutable.absolutePath(); +} MYXLIB_INLINE void Paths::setupSystemDirectories( const QString& defaultPrefixDirectory, @@ -172,20 +179,8 @@ MYXLIB_INLINE Paths::HierarchyType Paths::getHierarchyType() } // Paths::getHierarchyType -MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& configFileExtension ) +MYXLIB_INLINE bool Paths::initCommon() { - QFileInfo procSelfExe( QStringLiteral( "/proc/self/exe" ) ); - QFileInfo currentExecutable = procSelfExe.canonicalFilePath(); - m_executableName = currentExecutable.fileName(); - m_executableFilePath = currentExecutable.absoluteFilePath(); - m_executableDirectory = currentExecutable.absolutePath(); - - m_projectName = projectDir.isEmpty() ? m_executableName - : projectDir; - m_configFileExtension = configFileExtension.isEmpty() ? QStringLiteral( "conf" ) - : configFileExtension; - m_configFileName = m_projectName + "." + m_configFileExtension; - m_homeDirectory = QDir::homePath(); m_tempDirectory = QDir::tempPath(); @@ -214,6 +209,33 @@ MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& config } // Paths::updatePaths +MYXLIB_INLINE bool Paths::init() +{ + m_projectName = m_executableName; + m_configFileName = m_executableName + ".conf"; + return( initCommon() ); +} + + +MYXLIB_INLINE bool Paths::init( const QString& configFileName ) +{ + m_projectName = m_executableName; + m_configFileName = configFileName; + return( initCommon() ); +} + + +MYXLIB_INLINE bool Paths::init( const QString& projectName, const QString& configFileExtension ) +{ + m_projectName = projectName.isEmpty() ? m_executableName + : projectName; + auto ext = configFileExtension.isEmpty() ? QStringLiteral( "conf" ) + : configFileExtension; + m_configFileName = m_projectName + "." + ext; + return( initCommon() ); +} + + MYXLIB_INLINE bool Paths::makeDefaultDirectories() { bool status = true; @@ -281,12 +303,6 @@ MYXLIB_INLINE const QString& Paths::configFileName() const } -MYXLIB_INLINE const QString& Paths::configFileExtension() const -{ - return( m_configFileExtension ); -} - - MYXLIB_INLINE const QString& Paths::userVarDataDirectory() const { return( m_userVarDataDirectory ); diff --git a/src/myx/filesystem/paths.hpp b/src/myx/filesystem/paths.hpp index de22f4c..9baf284 100644 --- a/src/myx/filesystem/paths.hpp +++ b/src/myx/filesystem/paths.hpp @@ -44,62 +44,6 @@ class Paths kDevelopment = 0x07 }; - /// @brief Тип расположения файлов по каталогам - HierarchyType m_hierarchyType { HierarchyType::kFlat }; - - /// @brief Имя проекта, которое используется при формировании имён файлов и каталогов - QString m_projectName; - - QString m_executableName; - QString m_executableFilePath; - QString m_executableDirectory; - - /// @brief Общий префикс для файлов проекта - QString m_prefixDirectory; - - /// @brief Путь к каталогу с временными файлами - QString m_tempDirectory; - /// @brief Путь к домашнему каталогу текущего пользователя - QString m_homeDirectory; - - /// @brief Путь к пользовательскому каталогу с изменяемыми файлами - QString m_userVarDataDirectory; - /// @brief Путь к системному каталогу с изменяемыми файлами - QString m_systemVarDataDirectory; - - /// @brief Путь к пользовательскому каталогу с неизменяемыми файлами - QString m_userConstDataDirectory; - /// @brief Путь к системному каталогу с неизменяемыми файлами - QString m_systemConstDataDirectory; - - /// @brief Путь к пользовательскому каталогу с журналами работы - QString m_userLogDirectory; - /// @brief Путь к системному каталогу с журналами работы - QString m_systemLogDirectory; - - /// @brief Путь к пользовательскому каталогу с файлами настройки - QString m_userConfigDirectory; - /// @brief Путь к системному каталогу с файлами настройки - QString m_systemConfigDirectory; - - /// @brief Полный путь к файлу настройки - QString m_configFilePath; - /// @brief Имя файла настройки - QString m_configFileName; - /// @brief Расширение для файла настройки - QString m_configFileExtension; - - void setupSystemDirectories( const QString& defaultPrefixDirectory, - const QString& defaultEtcDirectory, - const QString& defaultConstDataDirectory, - const QString& defaultVarDataDirectory, - const QString& defaultLogDirectory ); - HierarchyType getHierarchyType(); - -protected: - Paths(); - ~Paths() = default; - public: Paths( const Paths& ) = delete; Paths& operator=( const Paths& ) = delete; @@ -120,7 +64,20 @@ public: /** * @brief Обновление путей с учётом расположения исполняемого файла */ - bool init( const QString& projectDir, const QString& configFileExtension = QStringLiteral("conf") ); + bool init(); + + /** + * @brief Обновление путей с учётом расположения исполняемого файла + * @param configFileName Имя файла настроек + */ + bool init( const QString& configFileName ); + + /** + * @brief Обновление путей с учётом расположения исполняемого файла + * @param projectName Имя проекта + * @param configFileExtension Расширение для файла настроек + */ + bool init( const QString& projectName, const QString& configFileExtension ); /** * @brief Создание стандартных каталогов @@ -226,6 +183,62 @@ public: * @brief Имя подкаталога для проекта */ const QString& projectName() const; + +protected: + Paths(); + ~Paths() = default; + +private: + /// @brief Тип расположения файлов по каталогам + HierarchyType m_hierarchyType { HierarchyType::kFlat }; + + /// @brief Имя проекта, которое используется при формировании имён файлов и каталогов + QString m_projectName; + + QString m_executableName; + QString m_executableFilePath; + QString m_executableDirectory; + + /// @brief Общий префикс для файлов проекта + QString m_prefixDirectory; + + /// @brief Путь к каталогу с временными файлами + QString m_tempDirectory; + /// @brief Путь к домашнему каталогу текущего пользователя + QString m_homeDirectory; + + /// @brief Путь к пользовательскому каталогу с изменяемыми файлами + QString m_userVarDataDirectory; + /// @brief Путь к системному каталогу с изменяемыми файлами + QString m_systemVarDataDirectory; + + /// @brief Путь к пользовательскому каталогу с неизменяемыми файлами + QString m_userConstDataDirectory; + /// @brief Путь к системному каталогу с неизменяемыми файлами + QString m_systemConstDataDirectory; + + /// @brief Путь к пользовательскому каталогу с журналами работы + QString m_userLogDirectory; + /// @brief Путь к системному каталогу с журналами работы + QString m_systemLogDirectory; + + /// @brief Путь к пользовательскому каталогу с файлами настройки + QString m_userConfigDirectory; + /// @brief Путь к системному каталогу с файлами настройки + QString m_systemConfigDirectory; + + /// @brief Полный путь к файлу настройки + QString m_configFilePath; + /// @brief Имя файла настройки + QString m_configFileName; + + void setupSystemDirectories( const QString& defaultPrefixDirectory, + const QString& defaultEtcDirectory, + const QString& defaultConstDataDirectory, + const QString& defaultVarDataDirectory, + const QString& defaultLogDirectory ); + bool initCommon(); + HierarchyType getHierarchyType(); }; // class Paths } // namespace filesystem From 078732d3080a3ce1c791e94758acd99504ee914d Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Fri, 10 Jul 2020 15:29:51 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/myx/qt/posix_signal_watcher.cpp | 5 +++-- src/myx/qt/translators.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/myx/qt/posix_signal_watcher.cpp b/src/myx/qt/posix_signal_watcher.cpp index 8709e41..fa98ff2 100644 --- a/src/myx/qt/posix_signal_watcher.cpp +++ b/src/myx/qt/posix_signal_watcher.cpp @@ -1,8 +1,8 @@ #ifndef MYX_QT_POSIX_SIGNAL_WATCHER_CPP_ #define MYX_QT_POSIX_SIGNAL_WATCHER_CPP_ -#include #include +#include #include #include @@ -67,7 +67,8 @@ MYXLIB_INLINE void PosixSignalWatcherPrivate::watchForSignal( int signal ) sigact.sa_handler = PosixSignalWatcherPrivate::signalHandler; //NOLINT sigact.sa_flags = 0; sigemptyset( &sigact.sa_mask ); - sigact.sa_flags |= SA_RESTART; + sigact.sa_flags |= SA_RESTART; + sigact.sa_restorer = nullptr; if ( ::sigaction( signal, &sigact, nullptr ) != 0 ) { qDebug() << "PosixSignalWatcher: sigaction: " << ::strerror( errno ); diff --git a/src/myx/qt/translators.cpp b/src/myx/qt/translators.cpp index d04ceca..1fd5beb 100644 --- a/src/myx/qt/translators.cpp +++ b/src/myx/qt/translators.cpp @@ -1,8 +1,8 @@ #ifndef MYX_QT_TRANSLATORS_CPP_ #define MYX_QT_TRANSLATORS_CPP_ -#include #include +#include #include From d951fd81cb4830781eda1b7edb42a4204266dc0a Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Wed, 22 Jul 2020 15:57:41 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/myx/backports/cpp/span.hpp | 2 +- src/myx/qt/posix_signal_watcher.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/myx/backports/cpp/span.hpp b/src/myx/backports/cpp/span.hpp index 6cf6339..ac09b51 100644 --- a/src/myx/backports/cpp/span.hpp +++ b/src/myx/backports/cpp/span.hpp @@ -144,7 +144,7 @@ public: * @param container The container to assign from */ template< class ContiguousContainer > - typename std::enable_if< is_contiguous_container< + typename std::enable_if< is_contiguous_container< //NOLINT ContiguousContainer, T >::value, span& >::type operator=( ContiguousContainer&& container ) diff --git a/src/myx/qt/posix_signal_watcher.cpp b/src/myx/qt/posix_signal_watcher.cpp index fa98ff2..4d5cc7d 100644 --- a/src/myx/qt/posix_signal_watcher.cpp +++ b/src/myx/qt/posix_signal_watcher.cpp @@ -37,7 +37,7 @@ PosixSignalWatcherPrivate::PosixSignalWatcherPrivate( PosixSignalWatcher* q ) : Q_Q( PosixSignalWatcher ); int signal = 0; - (void)::read( sockfd, &signal, sizeof( signal ) ); + Q_UNUSED( !::read( sockfd, &signal, sizeof( signal ) ) ); qDebug() << "Caught signal: " << ::strsignal( signal ); Q_EMIT q->posixSignal( signal ); } ); @@ -63,7 +63,7 @@ MYXLIB_INLINE void PosixSignalWatcherPrivate::watchForSignal( int signal ) #if MYX_QT_HAS_POSIX_SIGNALS // Register a sigaction which will write to the socket pair - struct sigaction sigact; + struct sigaction sigact; //NOLINT sigact.sa_handler = PosixSignalWatcherPrivate::signalHandler; //NOLINT sigact.sa_flags = 0; sigemptyset( &sigact.sa_mask ); @@ -86,7 +86,7 @@ MYXLIB_INLINE void PosixSignalWatcherPrivate::watchForSignal( int signal ) */ MYXLIB_INLINE void PosixSignalWatcherPrivate::signalHandler( int signal ) { - (void)::write( mSockpair[0], &signal, sizeof( signal ) ); + Q_UNUSED( !::write( mSockpair[0], &signal, sizeof( signal ) ) ); }