[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kio
From: David Faure <faure () kde ! org>
Date: 2007-09-25 20:52:57
Message-ID: 1190753577.330795.28020.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 717005 by dfaure:
Konqueror performance patch 1 (especially on a smbmount'ed directory): avoid a stat() \
call in KFileItem::isReadable() when possible
M +18 -10 kio/kfileitem.cpp
M +14 -1 tests/kfileitemtest.cpp
M +1 -0 tests/kfileitemtest.h
--- trunk/KDE/kdelibs/kio/kio/kfileitem.cpp #717004:717005
@@ -70,7 +70,7 @@
m_delayedMimeTypes( delayedMimeTypes ),
m_hidden( Auto )
{
- if (!entry.count()==0) {
+ if (entry.count() != 0) {
readUDSEntry( urlIsDirectory );
} else {
m_strName = url.fileName();
@@ -833,12 +833,18 @@
// for the groups... then we need to handle the deletion properly...
*/
- // No read permission at all
- if ( !(S_IRUSR & d->m_permissions) && !(S_IRGRP & d->m_permissions) && !(S_IROTH \
& d->m_permissions) )
- return false;
+ if (d->m_permissions != KFileItem::Unknown) {
+ // No read permission at all
+ if ( !(S_IRUSR & d->m_permissions) && !(S_IRGRP & d->m_permissions) && \
!(S_IROTH & d->m_permissions) ) + return false;
+ // Read permissions for all: save a stat call
+ if ( (S_IRUSR|S_IRGRP|S_IROTH) & d->m_permissions )
+ return true;
+ }
+
// Or if we can't read it [using ::access()] - not network transparent
- else if ( d->m_bIsLocalUrl && ::access( QFile::encodeName(d->m_url.path()), R_OK \
) == -1 ) + if ( d->m_bIsLocalUrl && ::access( QFile::encodeName(d->m_url.path()), \
R_OK ) == -1 ) return false;
return true;
@@ -854,12 +860,14 @@
// for the groups... then we need to handle the deletion properly...
*/
- // No write permission at all
- if ( !(S_IWUSR & d->m_permissions) && !(S_IWGRP & d->m_permissions) && !(S_IWOTH \
& d->m_permissions) )
- return false;
+ if (d->m_permissions != KFileItem::Unknown) {
+ // No write permission at all
+ if ( !(S_IWUSR & d->m_permissions) && !(S_IWGRP & d->m_permissions) && \
!(S_IWOTH & d->m_permissions) ) + return false;
+ }
// Or if we can't read it [using ::access()] - not network transparent
- else if ( d->m_bIsLocalUrl && ::access( QFile::encodeName(d->m_url.path()), W_OK \
) == -1 ) + if ( d->m_bIsLocalUrl && ::access( QFile::encodeName(d->m_url.path()), \
W_OK ) == -1 ) return false;
return true;
@@ -1091,7 +1099,7 @@
QString KFileItem::permissionsString() const
{
- if (d->m_access.isNull())
+ if (d->m_access.isNull() && d->m_permissions != KFileItem::Unknown)
d->m_access = d->parsePermissions( d->m_permissions );
return d->m_access;
--- trunk/KDE/kdelibs/kio/tests/kfileitemtest.cpp #717004:717005
@@ -39,6 +39,7 @@
KFileItem dirItem(KUrl(tempDir.name()), QString(), KFileItem::Unknown);
QCOMPARE((uint)dirItem.permissions(), (uint)0700);
QCOMPARE(dirItem.permissionsString(), QString("drwx------"));
+ QVERIFY(dirItem.isReadable());
// File
QFile file(tempDir.name() + "afile");
@@ -47,6 +48,7 @@
KFileItem fileItem(KUrl(file.fileName()), QString(), KFileItem::Unknown);
QCOMPARE((uint)fileItem.permissions(), (uint)0604);
QCOMPARE(fileItem.permissionsString(), QString("-rw----r--"));
+ QVERIFY(fileItem.isReadable());
// Symlink
QString symlink = tempDir.name() + "asymlink";
@@ -57,6 +59,7 @@
// This is a bit different from "ls -l": we get the 'l' but we see the \
permissions of the target.
// This is actually useful though; the user sees it's a link, and can check if \
he can read the [target] file. QCOMPARE(symlinkItem.permissionsString(), \
QString("lrw----r--")); + QVERIFY(symlinkItem.isReadable());
}
void KFileItemTest::testNull()
@@ -66,11 +69,21 @@
KFileItem fileItem(KUrl("/"), QString(), KFileItem::Unknown);
QVERIFY(!fileItem.isNull());
fileItem.mark();
- null = fileItem;
+ null = fileItem; // ok, now 'null' isn't so null anymore
QVERIFY(!null.isNull());
QVERIFY(null.isMarked());
+ QVERIFY(null.isReadable());
}
+void KFileItemTest::testDoesNotExist()
+{
+ KFileItem fileItem(KUrl("/doesnotexist"), QString(), KFileItem::Unknown);
+ QVERIFY(!fileItem.isNull());
+ QVERIFY(!fileItem.isReadable());
+ QVERIFY(fileItem.user().isEmpty());
+ QVERIFY(fileItem.group().isEmpty());
+}
+
void KFileItemTest::testDetach()
{
KFileItem fileItem(KUrl("/"), QString(), KFileItem::Unknown);
--- trunk/KDE/kdelibs/kio/tests/kfileitemtest.h #717004:717005
@@ -28,6 +28,7 @@
void initTestCase();
void testPermissionsString();
void testNull();
+ void testDoesNotExist();
void testDetach();
void testBasic();
void testMimeTypeOnDemand();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic