-rw-r--r-- | core/obex/receiver.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/core/obex/receiver.cpp b/core/obex/receiver.cpp index d5a7271..31c6afe 100644 --- a/core/obex/receiver.cpp +++ b/core/obex/receiver.cpp @@ -92,79 +92,81 @@ OtherHandler::OtherHandler() QPushButton *but = new QPushButton(box); but->setText(tr("Accept") ); connect(but, SIGNAL(clicked() ), this, SLOT(accept()) ); but = new QPushButton(box); but->setText(tr("Deny") ); connect(but, SIGNAL(clicked() ), this, SLOT(deny() ) ); raise(); showMaximized(); } OtherHandler::~OtherHandler() { } void OtherHandler::handle( const QString& file ) { m_file = file; m_na->setText(file); DocLnk lnk(file); qWarning(" %s %s", lnk.type().latin1(), lnk.icon().latin1() ); QString str = tr("<p>You received a file of type %1 (<img src=\"%2\"> )What do you want to do?").arg(lnk.type() ).arg(lnk.icon() ); m_view->setText( str ); } /* * hehe evil evil mmap ahead :) * we quickly copy the file and then we'll create a DocLnk for it */ void OtherHandler::accept() { QString na = targetName( m_file ); copy(m_file, na ); DocLnk lnk(na); lnk.writeLink(); QFile::remove(m_file); delete this; } void OtherHandler::deny() { QFile::remove( m_file ); delete this; } QString OtherHandler::targetName( const QString& file ) { QFileInfo info( file ); QString newFile = QPEApplication::documentDir()+ "/"+ info.baseName(); QString newFileBase = newFile; int trie = 0; - while (QFile::exists(newFile + info.extension() ) ) { + while (QFile::exists(newFile + "."+info.extension() ) ) { newFile = newFileBase + "_"+QString::number(trie) ; trie++; } - newFile += info.extension(); + newFile += "." + info.extension(); return newFile; } /* fast cpy */ void OtherHandler::copy(const QString& src, const QString& file) { + qWarning("src %s, dest %s", src.latin1(),file.latin1() ); int src_fd = ::open( QFile::encodeName( src ), O_RDONLY ); int to_fd = ::open( QFile::encodeName( file), O_RDWR| O_CREAT| O_TRUNC, S_IRUSR, S_IWUSR, S_IRGRP, S_IRGRP ); struct stat stater; ::fstat(src_fd, &stater ); ::lseek(to_fd, stater.st_size-1, SEEK_SET ); + ::write(to_fd, "", 1 ); void *src_addr, *dest_addr; src_addr = ::mmap(0, stater.st_size, PROT_READ, MAP_FILE | MAP_SHARED, src_fd, 0 ); dest_addr= ::mmap(0, stater.st_size, PROT_READ | PROT_WRITE, MAP_FILE | MAP_PRIVATE, to_fd, 0 ); - ::memcpy(src_addr , dest_addr, stater.st_size ); + ::memcpy(dest_addr , src_addr, stater.st_size ); ::munmap(src_addr , stater.st_size ); ::munmap(dest_addr, stater.st_size ); // done } |