author | zecke <zecke> | 2005-02-07 22:41:59 (UTC) |
---|---|---|
committer | zecke <zecke> | 2005-02-07 22:41:59 (UTC) |
commit | f112fe72adcfb8d3c6745c6ff878cbfbbdfbfa24 (patch) (side-by-side diff) | |
tree | 95f03410ad60ed5d04486821e9bc76cf1e3664ec | |
parent | 2e4fd59ce900490ccbbb6c0f7b2fcd4811ac8a07 (diff) | |
download | opie-f112fe72adcfb8d3c6745c6ff878cbfbbdfbfa24.zip opie-f112fe72adcfb8d3c6745c6ff878cbfbbdfbfa24.tar.gz opie-f112fe72adcfb8d3c6745c6ff878cbfbbdfbfa24.tar.bz2 |
Fix for #1482, do not start a path with "//". We do that by having
a method to assemble paths to avoid adding a second "/"
-rw-r--r-- | libopie2/opieui/fileselector/ofileselector.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/libopie2/opieui/fileselector/ofileselector.cpp b/libopie2/opieui/fileselector/ofileselector.cpp index 718f743..74aca96 100644 --- a/libopie2/opieui/fileselector/ofileselector.cpp +++ b/libopie2/opieui/fileselector/ofileselector.cpp @@ -57,16 +57,26 @@ #include <qregexp.h> #include <qobjectlist.h> using namespace Opie::Ui::Internal; namespace Opie { namespace Ui { namespace Internal { +/* + * Create a path by adding a '/'/QDir::seperator in between + * base and ending, but only if base is not empty + */ +static inline QString createNewPath(const QString& base, const QString &ending) { + return base == QString::fromLatin1("/") ? + base + ending : base + "/" + ending; +} + + OFileViewInterface::OFileViewInterface( OFileSelector* _selector ) : m_selector( _selector ) { selector()->registerView( this ); } OFileViewInterface::~OFileViewInterface() {} @@ -465,17 +475,17 @@ void OFileViewFileListView::reread( bool all ) } /* * It is a symlink we try to resolve it now but don't let us attack by DOS * */ if( fi->isSymLink() ) { - QString file = fi->dirPath( true ) + "/" + fi->readLink(); + QString file = createNewPath(fi->dirPath( true ),fi->readLink()); for( int i = 0; i<=4; i++) { // 5 tries to prevent dos QFileInfo info( file ); if( !info.exists() ) { addSymlink( fi, TRUE ); break; } @@ -486,17 +496,17 @@ void OFileViewFileListView::reread( bool all ) } else if( info.isFile() ) { addFile( fi, TRUE ); break; } else if( info.isSymLink() ) { - file = info.dirPath(true ) + "/" + info.readLink() ; + file = createNewPath(info.dirPath(true ),info.readLink()); break; } else if( i == 4) { // couldn't resolve symlink add it as symlink addSymlink( fi ); } } // off for loop for symlink resolving } @@ -558,17 +568,17 @@ void OFileViewFileListView::slotCurrentChanged( QListViewItem* item) if (!sel->isDir() ) { selector()->m_lneEdit->setText( sel->text(1) ); // if in fileselector mode we will emit selected if ( selector()->mode() == OFileSelector::FileSelector ) { odebug << "slot Current Changed" << oendl; QStringList str = QStringList::split("->", sel->text(1) ); - QString path = sel->directory() + "/" + str[0].stripWhiteSpace(); + QString path = createNewPath(sel->directory(),str[0].stripWhiteSpace()); emit selector()->fileSelected( path ); DocLnk lnk( path ); emit selector()->fileSelected( lnk ); } } #endif } @@ -578,25 +588,25 @@ void OFileViewFileListView::slotClicked(int button , QListViewItem* item, const return; OFileSelectorItem *sel = static_cast<OFileSelectorItem*>(item); if (!sel->isLocked() ) { QStringList str = QStringList::split("->", sel->text(1) ); if (sel->isDir() ) { - m_currentDir = sel->directory() + "/" + str[0].stripWhiteSpace(); + m_currentDir = createNewPath(sel->directory(),str[0].stripWhiteSpace()); emit selector()->dirSelected( m_currentDir ); reread( m_all ); } else { // file odebug << "slot Clicked" << oendl; selector()->m_lneEdit->setText( str[0].stripWhiteSpace() ); - QString path = sel->directory() + "/" + str[0].stripWhiteSpace(); + QString path = createNewPath(sel->directory(),str[0].stripWhiteSpace()); emit selector()->fileSelected( path ); DocLnk lnk( path ); emit selector()->fileSelected( lnk ); } } // not locked } void OFileViewFileListView::addFile( QFileInfo* info, bool symlink ) @@ -612,17 +622,17 @@ void OFileViewFileListView::addFile( QFileInfo* info, bool symlink ) QWMatrix matrix; QPixmap pixer(Resource::loadPixmap("UnknownDocument") ); matrix.scale( .4, .4 ); pix = pixer.xForm( matrix ); } dir = info->dirPath( true ); locked = false; if ( symlink ) - name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink(); + name = info->fileName() + " -> " + createNewPath(info->dirPath(),info->readLink()); else { name = info->fileName(); if ( ( (selector()->mode() == OFileSelector::Open)&& !info->isReadable() ) || ( (selector()->mode() == OFileSelector::Save)&& !info->isWritable() ) ) { locked = true; pix = Resource::loadPixmap("locked"); } @@ -643,17 +653,17 @@ void OFileViewFileListView::addDir( QFileInfo* info, bool symlink ) if ( symlink ) pix = Resource::loadPixmap( "opie/symlink" ); else pix = Resource::loadPixmap( "lockedfolder" ); } else pix = symlink ? Resource::loadPixmap( "opie/symlink") : Resource::loadPixmap("folder"); - name = symlink ? info->fileName() + " -> " + info->dirPath(true) + "/" + info->readLink() : + name = symlink ? info->fileName() + " -> " + createNewPath(info->dirPath(true),info->readLink()) : info->fileName(); (void)new OFileSelectorItem( m_view, pix, name, info->lastModified().toString(), QString::number( info->size() ), info->dirPath( true ), locked, true ); @@ -775,17 +785,17 @@ OFileViewFileSystem::~OFileViewFileSystem() QString OFileViewFileSystem::selectedName()const { if (!m_view ) return QString::null; QString cFN=currentFileName(); if (cFN.startsWith("/")) return cFN; - return m_view->currentDir() + "/" + cFN; + return createNewPath(m_view->currentDir(),cFN); } QString OFileViewFileSystem::selectedPath()const { return QString::null; } QString OFileViewFileSystem::directory()const |