From dc96afa26288897a9d25ab8c321d8ad350c53f44 Mon Sep 17 00:00:00 2001 From: waspe Date: Tue, 04 Nov 2003 17:08:12 +0000 Subject: resolved merge conflict --- (limited to 'library') diff --git a/library/filemanager.cpp b/library/filemanager.cpp index 91986a0..1c1c998 100644 --- a/library/filemanager.cpp +++ b/library/filemanager.cpp @@ -206,7 +206,7 @@ bool FileManager::copyFile( const AppLnk &src, const AppLnk &dest ) bytesRead -= bytesWritten; } } - + if ( ok ) ok = dest.writeLink(); @@ -225,8 +225,6 @@ bool FileManager::copyFile( const AppLnk &src, const AppLnk &dest ) return ok; } - - bool FileManager::copyFile( const QString & src, const QString & dest ) { bool success = true; struct stat status; @@ -320,6 +318,68 @@ bool FileManager::renameFile( const QString & src, const QString & dest ) { } +======= +bool FileManager::copyFile( const QString & src, const QString & dest ) { + bool success = true; + struct stat status; + int read_fd=0; + int write_fd=0; + struct stat stat_buf; + off_t offset = 0; + QFile srcFile(src); + QFile destFile(dest); + + if(!srcFile.open( IO_ReadOnly|IO_Raw)) { + return success = false; + } + read_fd = srcFile.handle(); + if(read_fd != -1) { + fstat (read_fd, &stat_buf); + if( !destFile.open( IO_WriteOnly|IO_Raw ) ) + return success = false; + write_fd = destFile.handle(); + if(write_fd != -1) { + int err=0; + QString msg; + err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size); + if( err == -1) { + switch(err) { + case EBADF : msg = "The input file was not opened for reading or the output file was not opened for writing. "; + case EINVAL: msg = "Descriptor is not valid or locked. "; + case ENOMEM: msg = "Insufficient memory to read from in_fd."; + case EIO: msg = "Unspecified error while reading from in_fd."; + }; + success = false; + } + } else { + qWarning("open write failed %s, %s",src.latin1(), dest.latin1()); + success = false; + } + } else { + qWarning("open read failed %s, %s",src.latin1(), dest.latin1()); + success = false; + } + srcFile.close(); + destFile.close(); + // Set file permissions + if( stat( (const char *) src, &status ) == 0 ) { + chmod( (const char *) dest, status.st_mode ); + } + + return success; +} + + +bool FileManager::renameFile( const QString & src, const QString & dest ) { + if(copyFile( src, dest )) { + if(QFile::remove(src) ) { + return true; + } + } + return false; +} + + /*! Opens the document specified by \a f as a readable QIODevice. The caller must delete the return value. -- cgit v0.9.0.2