summaryrefslogtreecommitdiff
path: root/library/filemanager.cpp
Side-by-side diff
Diffstat (limited to 'library/filemanager.cpp') (more/less context) (show whitespace changes)
-rw-r--r--library/filemanager.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/library/filemanager.cpp b/library/filemanager.cpp
index cc657fa..91986a0 100644
--- a/library/filemanager.cpp
+++ b/library/filemanager.cpp
@@ -33,3 +33,12 @@
#include <dirent.h>
+#ifdef Q_OS_MACX
+// MacOS X does not have sendfile.. :(
+// But maybe in the future.. !?
+# ifdef SENDFILE
+# include <sys/types.h>
+# include <sys/socket.h>
+# endif
+#else
#include <sys/sendfile.h>
+#endif /* Q_OS_MACX */
#include <fcntl.h>
@@ -218,2 +227,4 @@ bool FileManager::copyFile( const AppLnk &src, const AppLnk &dest )
+
+
bool FileManager::copyFile( const QString & src, const QString & dest ) {
@@ -240,2 +251,31 @@ bool FileManager::copyFile( const QString & src, const QString & dest ) {
QString msg;
+#ifdef Q_OS_MACX
+#ifdef SENDMAIL
+ /* FreeBSD does support a different kind of
+ * sendfile. (eilers)
+ * I took this from Very Secure FTPd
+ * Licence: GPL
+ * Author: Chris Evans
+ * sysdeputil.c
+ */
+ /* XXX - start_pos will truncate on 32-bit machines - can we
+ * say "start from current pos"?
+ */
+ off_t written = 0;
+ int retval = 0;
+ retval = sendfile(read_fd, write_fd, offset, stat_buf.st_size, NULL,
+ &written, 0);
+ /* Translate to Linux-like retval */
+ if (written > 0)
+ {
+ err = (int) written;
+ }
+#else /* SENDMAIL */
+ err == -1;
+ msg = "FAILURE: Using unsupported function \"sendfile()\" Need Workaround !!";
+ success = false;
+# warning "Need workaround for sendfile!!(eilers)"
+#endif /* SENDMAIL */
+
+#else
err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
@@ -250,2 +290,5 @@ bool FileManager::copyFile( const QString & src, const QString & dest ) {
}
+#endif /* Q_OS_MACX */
+ if( !success )
+ qWarning( msg );
} else {