summaryrefslogtreecommitdiff
path: root/library
Unidiff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/filemanager.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/library/filemanager.cpp b/library/filemanager.cpp
index 1e7384e..99837fe 100644
--- a/library/filemanager.cpp
+++ b/library/filemanager.cpp
@@ -213,129 +213,129 @@ bool FileManager::copyFile( const AppLnk &src, const AppLnk &dest )
213 qWarning( "problem renaming file %s to %s, errno: %d", fn.latin1(), 213 qWarning( "problem renaming file %s to %s, errno: %d", fn.latin1(),
214 dest.file().latin1(), errno ); 214 dest.file().latin1(), errno );
215 // remove the tmp file, otherwise, it will just lay around... 215 // remove the tmp file, otherwise, it will just lay around...
216 QFile::remove( fn.latin1() ); 216 QFile::remove( fn.latin1() );
217 } 217 }
218 } else { 218 } else {
219 QFile::remove( fn.latin1() ); 219 QFile::remove( fn.latin1() );
220 } 220 }
221 221
222 return ok; 222 return ok;
223} 223}
224 224
225bool FileManager::copyFile( const QString & src, const QString & dest ) { 225bool FileManager::copyFile( const QString & src, const QString & dest ) {
226 bool success = true; 226 bool success = true;
227 struct stat status; 227 struct stat status;
228 int read_fd=0; 228 int read_fd=0;
229 int write_fd=0; 229 int write_fd=0;
230 struct stat stat_buf; 230 struct stat stat_buf;
231 off_t offset = 0; 231 off_t offset = 0;
232 QFile srcFile(src); 232 QFile srcFile(src);
233 QFile destFile(dest); 233 QFile destFile(dest);
234 234
235 if(!srcFile.open( IO_ReadOnly|IO_Raw)) { 235 if(!srcFile.open( IO_ReadOnly|IO_Raw)) {
236 return success = false; 236 return success = false;
237 } 237 }
238 read_fd = srcFile.handle(); 238 read_fd = srcFile.handle();
239 if(read_fd != -1) { 239 if(read_fd != -1) {
240 fstat (read_fd, &stat_buf); 240 fstat (read_fd, &stat_buf);
241 if( !destFile.open( IO_WriteOnly|IO_Raw ) ) 241 if( !destFile.open( IO_WriteOnly|IO_Raw ) )
242 return success = false; 242 return success = false;
243 write_fd = destFile.handle(); 243 write_fd = destFile.handle();
244 if(write_fd != -1) { 244 if(write_fd != -1) {
245 int err=0; 245 int err=0;
246 QString msg; 246 QString msg;
247#ifdef Q_OS_MACX 247#ifdef Q_OS_MACX
248#ifdef SENDFILE 248#ifdef SENDFILE
249 /* FreeBSD does support a different kind of 249 /* FreeBSD does support a different kind of
250 * sendfile. (eilers) 250 * sendfile. (eilers)
251 * I took this from Very Secure FTPd 251 * I took this from Very Secure FTPd
252 * Licence: GPL 252 * Licence: GPL
253 * Author: Chris Evans 253 * Author: Chris Evans
254 * sysdeputil.c 254 * sysdeputil.c
255 */ 255 */
256 /* XXX - start_pos will truncate on 32-bit machines - can we 256 /* XXX - start_pos will truncate on 32-bit machines - can we
257 * say "start from current pos"? 257 * say "start from current pos"?
258 */ 258 */
259 off_t written = 0; 259 off_t written = 0;
260 int retval = 0; 260 int retval = 0;
261 retval = sendfile(read_fd, write_fd, offset, stat_buf.st_size, NULL, 261 retval = sendfile(read_fd, write_fd, offset, stat_buf.st_size, NULL,
262 &written, 0); 262 &written, 0);
263 /* Translate to Linux-like retval */ 263 /* Translate to Linux-like retval */
264 if (written > 0) 264 if (written > 0)
265 { 265 {
266 err = (int) written; 266 err = (int) written;
267 } 267 }
268#else /* SENDFILE */ 268#else /* SENDFILE */
269 err == -1; 269 err == -1;
270 msg = "FAILURE: Using unsupported function \"sendfile()\" Need Workaround !!"; 270 msg = "FAILURE: Using unsupported function \"sendfile()\" Need Workaround !!";
271 success = false; 271 success = false;
272# warning "Need workaround for sendfile!!(eilers)" 272# warning "Need workaround for sendfile!!(eilers)"
273#endif /* SENDFILE */ 273#endif /* SENDFILE */
274 274
275#else 275#else
276 err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size); 276 err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
277 if( err == -1) { 277 if( err != -1) {
278 switch(err) { 278 switch(err) {
279 case EBADF : msg = "The input file was not opened for reading or the output file was not opened for writing. "; 279 case EBADF : msg = "The input file was not opened for reading or the output file was not opened for writing. ";
280 case EINVAL: msg = "Descriptor is not valid or locked. "; 280 case EINVAL: msg = "Descriptor is not valid or locked. ";
281 case ENOMEM: msg = "Insufficient memory to read from in_fd."; 281 case ENOMEM: msg = "Insufficient memory to read from in_fd.";
282 case EIO: msg = "Unspecified error while reading from in_fd."; 282 case EIO: msg = "Unspecified error while reading from in_fd.";
283 }; 283 };
284 success = false; 284 success = false;
285 } 285 }
286#endif /* Q_OS_MACX */ 286#endif /* Q_OS_MACX */
287 if( !success ) 287 if( !success )
288 qWarning( msg ); 288 qWarning( msg );
289 } else { 289 } else {
290 qWarning("open write failed %s, %s",src.latin1(), dest.latin1()); 290 qWarning("open write failed %s, %s",src.latin1(), dest.latin1());
291 success = false; 291 success = false;
292 } 292 }
293 } else { 293 } else {
294 qWarning("open read failed %s, %s",src.latin1(), dest.latin1()); 294 qWarning("open read failed %s, %s",src.latin1(), dest.latin1());
295 success = false; 295 success = false;
296 } 296 }
297 srcFile.close(); 297 srcFile.close();
298 destFile.close(); 298 destFile.close();
299 // Set file permissions 299 // Set file permissions
300 if( stat( (const char *) src, &status ) == 0 ) { 300 if( stat( (const char *) src, &status ) == 0 ) {
301 chmod( (const char *) dest, status.st_mode ); 301 chmod( (const char *) dest, status.st_mode );
302 } 302 }
303 303
304 return success; 304 return success;
305} 305}
306 306
307 307
308bool FileManager::renameFile( const QString & src, const QString & dest ) { 308bool FileManager::renameFile( const QString & src, const QString & dest ) {
309 if(copyFile( src, dest )) { 309 if(copyFile( src, dest )) {
310 if(QFile::remove(src) ) { 310 if(QFile::remove(src) ) {
311 return true; 311 return true;
312 } 312 }
313 } 313 }
314 return false; 314 return false;
315} 315}
316 316
317/* 317/*
318bool FileManager::copyFile( const QString & src, const QString & dest ) { 318bool FileManager::copyFile( const QString & src, const QString & dest ) {
319 bool success = true; 319 bool success = true;
320 struct stat status; 320 struct stat status;
321 int read_fd=0; 321 int read_fd=0;
322 int write_fd=0; 322 int write_fd=0;
323 struct stat stat_buf; 323 struct stat stat_buf;
324 off_t offset = 0; 324 off_t offset = 0;
325 QFile srcFile(src); 325 QFile srcFile(src);
326 QFile destFile(dest); 326 QFile destFile(dest);
327 327
328 if(!srcFile.open( IO_ReadOnly|IO_Raw)) { 328 if(!srcFile.open( IO_ReadOnly|IO_Raw)) {
329 return success = false; 329 return success = false;
330 } 330 }
331 read_fd = srcFile.handle(); 331 read_fd = srcFile.handle();
332 if(read_fd != -1) { 332 if(read_fd != -1) {
333 fstat (read_fd, &stat_buf); 333 fstat (read_fd, &stat_buf);
334 if( !destFile.open( IO_WriteOnly|IO_Raw ) ) 334 if( !destFile.open( IO_WriteOnly|IO_Raw ) )
335 return success = false; 335 return success = false;
336 write_fd = destFile.handle(); 336 write_fd = destFile.handle();
337 if(write_fd != -1) { 337 if(write_fd != -1) {
338 int err=0; 338 int err=0;
339 QString msg; 339 QString msg;
340 err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size); 340 err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
341 if( err == -1) { 341 if( err == -1) {