[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