-rw-r--r-- | library/filemanager.cpp | 43 |
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 @@ -32,5 +32,14 @@ #include <sys/stat.h> #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> @@ -217,4 +226,6 @@ bool FileManager::copyFile( const AppLnk &src, const AppLnk &dest ) } + + bool FileManager::copyFile( const QString & src, const QString & dest ) { bool success = true; @@ -239,4 +250,33 @@ bool FileManager::copyFile( const QString & src, const QString & dest ) { int err=0; 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); if( err == -1) { @@ -249,4 +289,7 @@ bool FileManager::copyFile( const QString & src, const QString & dest ) { success = false; } +#endif /* Q_OS_MACX */ + if( !success ) + qWarning( msg ); } else { qWarning("open write failed %s, %s",src.latin1(), dest.latin1()); |