$NetBSD: patch-ac,v 1.6 2009/04/07 10:59:48 hasso Exp $ --- src/tools/qdir_unix.cpp.orig 2007-02-02 16:01:05 +0200 +++ src/tools/qdir_unix.cpp 2009-04-07 13:10:26 +0300 @@ -36,6 +36,16 @@ **********************************************************************/ #include "qplatformdefs.h" + +#ifdef Q_TRAILING_DIR_SEP // Some OSes doesn't support trailing /'s + +// POSIX Large File Support redefines truncate -> truncate64 +#if defined(truncate) +# undef truncate +#endif + +#endif + #include "qdir.h" #ifndef QT_NO_DIR @@ -53,6 +63,9 @@ #include #include +#ifndef MAXNAMLEN +#define MAXNAMLEN NAME_MAX +#endif void QDir::slashify( QString& ) { @@ -88,10 +101,19 @@ QString QDir::canonicalPath() const bool QDir::mkdir( const QString &dirName, bool acceptAbsPath ) const { -#if defined(Q_OS_MACX) // Mac X doesn't support trailing /'s +#ifdef Q_TRAILING_DIR_SEP // Some OSes doesn't support trailing /'s QString name = dirName; - if (dirName[dirName.length() - 1] == "/") - name = dirName.left( dirName.length() - 1 ); + int pos = name.length(); + if (pos > 0) { + while ( (pos - 1) >= 0 && name[pos - 1] == '/' ) { + --pos; + }; + if ( pos == 0 ) { + name = QDir::rootDirPath(); + } else { + name.truncate( pos ); + } + } int status = ::mkdir( QFile::encodeName(filePath(name,acceptAbsPath)), 0777 ); #else @@ -103,7 +125,24 @@ bool QDir::mkdir( const QString &dirName bool QDir::rmdir( const QString &dirName, bool acceptAbsPath ) const { +#ifdef Q_TRAILING_DIR_SEP // Some OSes doesn't support trailing /'s + QString name = dirName; + int pos = name.length(); + if (pos > 0) { + while ( (pos - 1) >= 0 && name[pos - 1] == '/' ) { + --pos; + }; + if ( pos == 0 ) { + name = QDir::rootDirPath(); + } else { + name.truncate( pos ); + } + } + return ::rmdir( QFile::encodeName(filePath(name,acceptAbsPath)) ) + == 0; +#else return ::rmdir( QFile::encodeName(filePath(dirName,acceptAbsPath)) ) == 0; +#endif } bool QDir::isReadable() const