From c22190fbf763178681399c85137d23d0a195616f Mon Sep 17 00:00:00 2001 From: diger Date: Sat, 12 Jul 2014 16:34:26 +0600 Subject: [PATCH] Add patches for support Haiku (https://www.haiku-os.org) --- src/filesystemwatcher.h | 8 ++++---- src/fs_utils.cpp | 15 +++++++++++++++ src/main.cpp | 4 ++-- unixconf.pri | 4 +++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/filesystemwatcher.h b/src/filesystemwatcher.h index 99fd68f1d..93a57d21d 100644 --- a/src/filesystemwatcher.h +++ b/src/filesystemwatcher.h @@ -16,7 +16,7 @@ #include #include #include -#else +#elif !defined Q_WS_HAIKU #include #endif #endif @@ -56,7 +56,7 @@ private: QHash m_partialTorrents; QPointer m_partialTorrentTimer; -#ifndef Q_OS_WIN +#if !defined Q_WS_WIN && !defined Q_WS_HAIKU private: static bool isNetworkFileSystem(QString path) { QString file = path; @@ -145,7 +145,7 @@ public: } void addPath(const QString & path) { -#ifndef Q_OS_WIN +#if !defined Q_WS_WIN && !defined Q_WS_HAIKU QDir dir(path); if (!dir.exists()) return; @@ -167,7 +167,7 @@ public: qDebug("FS Watching is watching %s in normal mode", qPrintable(path)); QFileSystemWatcher::addPath(path); scanLocalFolder(path); -#ifndef Q_OS_WIN +#if !defined Q_WS_WIN && !defined Q_WS_HAIKU } #endif } diff --git a/src/fs_utils.cpp b/src/fs_utils.cpp index 4e28145cd..065078165 100644 --- a/src/fs_utils.cpp +++ b/src/fs_utils.cpp @@ -52,6 +52,8 @@ #if defined(Q_OS_MAC) || defined(Q_OS_FREEBSD) #include #include +#elif defined(Q_WS_HAIKU) +#include #else #include #endif @@ -289,6 +291,18 @@ long long fsutils::freeDiskSpaceOnPath(QString path) { #ifndef Q_OS_WIN unsigned long long available; +#ifdef Q_WS_HAIKU + const QString statfs_path = dir_path.path()+"/."; + dev_t device = dev_for_path (qPrintable(statfs_path)); + if (device >= 0) { + fs_info info; + if(fs_stat_dev(device, &info)==B_OK){ + available = ((unsigned long long)(info.free_blocks*info.block_size)); + return available; + } + } + return -1; +#else struct statfs stats; const QString statfs_path = dir_path.path()+"/."; const int ret = statfs (qPrintable(statfs_path), &stats) ; @@ -299,6 +313,7 @@ long long fsutils::freeDiskSpaceOnPath(QString path) { } else { return -1; } +#endif #else typedef BOOL (WINAPI *GetDiskFreeSpaceEx_t)(LPCTSTR, PULARGE_INTEGER, diff --git a/src/main.cpp b/src/main.cpp index 04cc33f35..03706245a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -156,7 +156,7 @@ void sigtermHandler(int) { void sigsegvHandler(int) { signal(SIGABRT, 0); signal(SIGSEGV, 0); -#ifndef Q_OS_WIN +#if !defined Q_WS_WIN && !defined Q_WS_HAIKU std::cerr << "\n\n*************************************************************\n"; std::cerr << "Catching SIGSEGV, please report a bug at http://bug.qbittorrent.org\nand provide the following backtrace:\n"; std::cerr << "qBittorrent version: " << VERSION << std::endl; @@ -173,7 +173,7 @@ void sigsegvHandler(int) { void sigabrtHandler(int) { signal(SIGABRT, 0); signal(SIGSEGV, 0); -#ifndef Q_OS_WIN +#if !defined Q_WS_WIN && !defined Q_WS_HAIKU std::cerr << "\n\n*************************************************************\n"; std::cerr << "Catching SIGABRT, please report a bug at http://bug.qbittorrent.org\nand provide the following backtrace:\n"; std::cerr << "qBittorrent version: " << VERSION << std::endl; diff --git a/unixconf.pri b/unixconf.pri index e7d4ffb51..6e1cfffa9 100644 --- a/unixconf.pri +++ b/unixconf.pri @@ -15,7 +15,9 @@ exists($$OUT_PWD/../conf.pri) { } QMAKE_CXXFLAGS += -Wformat -Wformat-security -QMAKE_LFLAGS_APP += -rdynamic +!haiku { + QMAKE_LFLAGS_APP += -rdynamic +} # Man page nox {