Sophie

Sophie

distrib > Mandriva > 2006.0 > i586 > media > main-src > by-pkgid > a6bc312ce50b5c8d0c51736e58ac32bc > files > 119

kdebase-3.4.2-55mdk.src.rpm

--- kdebase-3.1.3/kioslave/devices/kdedmodule/mountwatcher.cpp--	2003-09-09 17:42:01.000000000 -0400
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/mountwatcher.cpp	2003-09-09 17:49:08.000000000 -0400
@@ -44,6 +44,8 @@ MountWatcherModule::MountWatcherModule(c
     : KDEDModule(obj),mDiskList(this),mtabsize(0)
 {
 	firstTime=true;
+        connect(&mDiskList,SIGNAL(readDFDone()),this,SLOT(readDFDone()));
+
         connect(&mDiskList,SIGNAL(scanDevice( const QString &)),this,SLOT(slotScanDevice(const QString&)));
 
 	mDiskList.readFSTAB();
@@ -65,7 +67,7 @@ MountWatcherModule::MountWatcherModule(c
 #endif
 #endif
 
-connect(&mDiskList,SIGNAL(readDFDone()),this,SLOT(readDFDone()));
+//connect(&mDiskList,SIGNAL(readDFDone()),this,SLOT(readDFDone()));
 }
 
 MountWatcherModule::~MountWatcherModule()
--- kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.cpp--	2003-09-09 17:42:01.000000000 -0400
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.cpp	2003-09-09 17:48:32.000000000 -0400
@@ -31,7 +31,6 @@
 #include <kapplication.h>
 
 #include "disklist.h"
-#include <iostream.h>
 #define BLANK ' '
 #define DELIMITER '#'
 #define FULL_PERCENT 95.0
@@ -77,20 +76,10 @@ if (NO_FS_TYPE)
    disks = new Disks;
    disks->setAutoDelete(TRUE);
 
-   // BackgroundProcesses ****************************************
-      dfProc = new KProcess(); Q_CHECK_PTR(dfProc);
-       connect( dfProc, SIGNAL(receivedStdout(KProcess *, char *, int) ),
-           this, SLOT (receivedDFStdErrOut(KProcess *, char *, int)) );
-       //connect( dfProc, SIGNAL(receivedStderr(KProcess *, char *, int) ),
-       //  this, SLOT (receivedDFStdErrOut(KProcess *, char *, int)) );
-       connect(dfProc,SIGNAL(processExited(KProcess *) ),
-              this, SLOT(dfDone() ) );
-
-       readingDFStdErrOut=FALSE;
-       config = kapp->config();
-       loadSettings();
-       //readFSTAB();
-       //readDF();
+   config = kapp->config();
+   loadSettings();
+   //readFSTAB();
+   //readDF();
 }
 
 
@@ -99,7 +88,6 @@ if (NO_FS_TYPE)
 **/
 DiskList::~DiskList()
 {
-    delete dfProc;
 }
 
 
@@ -164,258 +152,166 @@ void DiskList::loadSettings()
  }
 }
 
-/***************************************************************************
-  * tries to figure out the possibly mounted fs
-**/
-int DiskList::readFSTAB()
+int DiskList::parseMountFile( bool mtab )
 {
-  if (readingDFStdErrOut || dfProc->isRunning()) return -1;
+    QFile f;
+    if( mtab )
+        f.setName(MTAB);
+    else
+        f.setName(FSTAB);
+    if ( f.open(IO_ReadOnly) )
+    {
+        QTextStream t (&f);
+        DiskEntry *disk;
+        QString s;
+
+        if( mtab )
+            disks->clear();
+
+        while ( !t.atEnd() )
+        {
+            s=t.readLine();
+            s=s.simplifyWhiteSpace();
 
-  QFile f(FSTAB);
-  if ( f.open(IO_ReadOnly) ) {
-    QTextStream t (&f);
-    QString s;
-    DiskEntry *disk;
-
-    disks->clear(); // ############
-
-    while (! t.eof()) {
-      s=t.readLine();
-      s=s.simplifyWhiteSpace();
-      if ( (!s.isEmpty() ) && (s.find(DELIMITER)!=0) ) {
-               // not empty or commented out by '#'
-	//	kdDebug() << "GOT: [" << s << "]" << endl;
-	disk = new DiskEntry();// Q_CHECK_PTR(disk);
-        disk->setMounted(FALSE);
-        disk->setDeviceName(s.left(s.find(BLANK)) );
-            s=s.remove(0,s.find(BLANK)+1 );
-            //kdDebug() << "    deviceName:    [" << disk->deviceName() << "]" << endl;
+            if ( (!s.isEmpty() ) && (s.find(DELIMITER)!=0) )
+            {
+                // not empty or commented out by '#'
+                //	kdDebug() << "GOT: [" << s << "]" << endl;
+                disk = new DiskEntry();
+                disk->setMounted(FALSE);
+                disk->setDeviceName(s.left(s.find(BLANK)) );
+                s=s.remove(0,s.find(BLANK)+1 );
+                //kdDebug() << "    deviceName:    [" << disk->deviceName() << "]" << endl;
 #ifdef _OS_SOLARIS_
-            //device to fsck
-            s=s.remove(0,s.find(BLANK)+1 );
+                //device to fsck
+                s=s.remove(0,s.find(BLANK)+1 );
 #endif
-         disk->setMountPoint(s.left(s.find(BLANK)) );
-            s=s.remove(0,s.find(BLANK)+1 );
-	    //kdDebug() << "    MountPoint:    [" << disk->mountPoint() << "]" << endl;
-	    //kdDebug() << "    Icon:          [" << disk->iconName() << "]" << endl;
-         disk->setFsType(s.left(s.find(BLANK)) );
-            s=s.remove(0,s.find(BLANK)+1 );
-	    //kdDebug() << "    FS-Type:       [" << disk->fsType() << "]" << endl;
-         disk->setMountOptions(s.left(s.find(BLANK)) );
-            s=s.remove(0,s.find(BLANK)+1 );
-	    //kdDebug() << "    Mount-Options: [" << disk->mountOptions() << "]" << endl;
-            if( disk->mountOptions().find("user")==-1 &&
-                !(disk->fsType()=="supermount" && disk->deviceName()=="none"))
-            {
-                delete disk;
-            }
-            else
-            {
-                if (!ignoreDisk(disk))
-                    replaceDeviceEntry(disk);
+                disk->setMountPoint(s.left(s.find(BLANK)) );
+                s=s.remove(0,s.find(BLANK)+1 );
+                //kdDebug() << "    MountPoint:    [" << disk->mountPoint() << "]" << endl;
+                //kdDebug() << "    Icon:          [" << disk->iconName() << "]" << endl;
+                disk->setFsType(s.left(s.find(BLANK)) );
+                s=s.remove(0,s.find(BLANK)+1 );
+                //kdDebug() << "    FS-Type:       [" << disk->fsType() << "]" << endl;
+                disk->setMountOptions(s.left(s.find(BLANK)) );
+                s=s.remove(0,s.find(BLANK)+1 );
+                //kdDebug() << "    Mount-Options: [" << disk->mountOptions() << "]" << endl;
+                if( !mtab )
+                {
+                    if( (disk->fsType()!="nfs") &&(disk->mountOptions().find("user")==-1 && !(disk->fsType()=="supermount" && disk->deviceName()=="none")))
+                    {
+                        delete disk;
+                    }
+                    else
+                    {
+                        if (!ignoreDisk(disk))
+                        {
+                            replaceDeviceEntry(disk);
+                        }
+                        else
+                            delete disk;
+                    }
+                }
                 else
-                    delete disk;
+                {
+                    if( !ignoreDisk(disk))
+                    {
+                        disk->setMounted(true);
+                        replaceDeviceEntryMounted(disk);
+                    }
+                    else
+                        delete disk;
+                }
+
+            } //if not empty
+
+        }//while further lines available
+
+        if( mtab )
+        {
+            for ( DiskEntry *disk=disks->first(); disk != 0; disk=disks->next() )
+            {
+                if ( disk->fsType()=="supermount" && disk->deviceName() == "none")
+                    disk->setMounted(TRUE);
             }
 
-      } //if not empty
-    } //while
-    f.close();
-  } //if f.open
+            loadSettings();
+            emit readDFDone();
+        }
+        else
+            loadSettings();
+        f.close();
+        return 1;
+    }
+    return 0;
 
-  loadSettings(); //to get the mountCommands
-  return 1;
 }
 
-bool DiskList::ignoreDisk(DiskEntry *disk)
+int DiskList::readMTAB()
 {
-	bool ignore;
-        if ( disk->fsType()=="supermount" && disk->deviceName() == "none")
-	{
-            emit scanDevice(disk->mountPoint());
-            ignore = false;
-	}
-	else
-	{
-		if ( (disk->deviceName() != "none")
-	    	  	&& (disk->fsType() != "swap")
-	      		&&(disk->fsType() != "tmpfs")
-	      		&& (disk->deviceName() != "tmpfs")
-	      		&& (disk->mountPoint() != "/dev/swap")
-	      		&& (disk->mountPoint() != "/dev/pts")
-	      		&& (disk->mountPoint().find("/proc") != 0)
-	      		&& (disk->deviceName().find("shm") == -1  ))
-			ignore=false;
-		else
-			ignore=true;
-	}
-	if (!ignore) {
-		for (QRegExp *exp=mountPointExclusionList.getFirst();exp;exp=mountPointExclusionList.next())
-		{
-			kdDebug()<<"TRYING TO DO A REGEXP SEARCH"<<endl;
-                        if( disk->mountOptions().find("user")!=-1)
-                            return false;
-			if (exp->search(disk->mountPoint())!=-1)
-			{
-				kdDebug()<<"IGNORING BECAUSE OF REGEXP SEARCH"<<endl;
-				return true;
-			}
-		}
-	}
+    for ( DiskEntry *disk=disks->first(); disk != 0; disk=disks->next() )
+        disk->setMounted(FALSE);  // set all devs unmounted
+    return parseMountFile( true );
 
-	return ignore;
 }
 
-
-
 /***************************************************************************
-  * is called, when the df-command writes on StdOut or StdErr
+  * tries to figure out the possibly mounted fs
 **/
-void DiskList::receivedDFStdErrOut(KProcess *, char *data, int len )
+int DiskList::readFSTAB()
 {
-
-  /* ATTENTION: StdERR no longer connected to this...
-   * Do we really need StdErr?? on HP-UX there was eg. a line
-   * df: /home_tu1/ijzerman/floppy: Stale NFS file handle
-   * but this shouldn't cause a real problem
-   */
-
-  QString tmp = QString(data) + QString("\0");  // adds a zero-byte
-  tmp.truncate(len);
-
-  dfStringErrOut.append(tmp);
+    return parseMountFile( false );
 }
 
-/***************************************************************************
-  * reads the df-commands results
-**/
-int DiskList::readDF()
+bool DiskList::ignoreDisk(DiskEntry *disk)
 {
-  if (readingDFStdErrOut || dfProc->isRunning()) return -1;
-  setenv("LANG", "en_US", 1);
-  setenv("LC_ALL", "en_US", 1);
-  setenv("LC_MESSAGES", "en_US", 1);
-  setenv("LC_TYPE", "en_US", 1);
-  setenv("LANGUAGE", "en_US", 1);
-  dfStringErrOut=""; // yet no data received
-  dfProc->clearArguments();
-  (*dfProc) << DF_COMMAND << DF_ARGS;
-  if (!dfProc->start( KProcess::NotifyOnExit, KProcess::AllOutput ))
-  {
-    kdWarning(7020)<<i18n("could not execute [%1]").arg(DF_COMMAND)<<endl;
-    return 0;
-  }
+    bool ignore;
+    if ( disk->fsType()=="supermount" && disk->deviceName() == "none")
+    {
+        emit scanDevice(disk->mountPoint());
+        ignore = false;
+    }
+    else
+    {
+        if ( (disk->deviceName() != "none")
+             && (disk->fsType() != "swap")
+             &&(disk->fsType() != "tmpfs")
+             && (disk->deviceName() != "tmpfs")
+             && (disk->mountPoint() != "/dev/swap")
+             && (disk->mountPoint() != "/dev/pts")
+             && (disk->mountPoint().find("/proc") != 0)
+             && (disk->deviceName().find("shm") == -1  ))
+        {
+            ignore=false;
+        }
+        else
+        {
+            ignore=true;
+        }
+    }
+    if (!ignore) {
+        for (QRegExp *exp=mountPointExclusionList.getFirst();exp;exp=mountPointExclusionList.next())
+        {
+            kdDebug()<<"TRYING TO DO A REGEXP SEARCH"<<endl;
+            if( disk->mountOptions().find("user")!=-1)
+                return false;
+            if (exp->search(disk->mountPoint())!=-1)
+            {
+                kdDebug()<<"IGNORING BECAUSE OF REGEXP SEARCH"<<endl;
+                return true;
+            }
+        }
+    }
 
-  return 1;
+    return ignore;
 }
 
 
-/***************************************************************************
-  * is called, when the df-command has finished
-**/
-void DiskList::dfDone()
+int DiskList::readDF()
 {
-     readingDFStdErrOut=TRUE;
-     for ( DiskEntry *disk=disks->first(); disk != 0; disk=disks->next() )
-         disk->setMounted(FALSE);  // set all devs unmounted
-
-     QTextStream t (dfStringErrOut, IO_ReadOnly);
-     QString s=t.readLine();
-     if ( ( s.isEmpty() ) || ( s.left(10) != "Filesystem" ) )
-     {
-         kdWarning(7020)<<QString("Error running df command, couldn't parse output")<<endl;
-         return;
-     }
-     while ( !t.atEnd() ) {
-         QString u,v;
-         DiskEntry *disk;
-         s=t.readLine();
-         s=s.simplifyWhiteSpace();
-         if ( !s.isEmpty() ) {
-             disk = new DiskEntry(); Q_CHECK_PTR(disk);
-
-             if (s.find(BLANK)<0)      // devicename was too long, rest in next line
-                 if ( !t.eof() ) {       // just appends the next line
-                     v=t.readLine();
-                     s=s.append(v.latin1() );
-                     s=s.simplifyWhiteSpace();
-                     //kdDebug() << "SPECIAL GOT: [" << s << "]" << endl;
-                 }//if silly linefeed
-
-             //kdDebug() << "EFFECTIVELY GOT " << s.length() << " chars: [" << s << "]" << endl;
-
-             disk->setDeviceName(s.left(s.find(BLANK)) );
-             s=s.remove(0,s.find(BLANK)+1 );
-             //kdDebug() << "    DeviceName:    [" << disk->deviceName() << "]" << endl;
-
-             if (NO_FS_TYPE) {
-                 //kdDebug() << "THERE IS NO FS_TYPE_FIELD!" << endl;
-                 disk->setFsType("?");
-             } else {
-                 disk->setFsType(s.left(s.find(BLANK)) );
-                 s=s.remove(0,s.find(BLANK)+1 );
-             };
-             //kdDebug() << "    FS-Type:       [" << disk->fsType() << "]" << endl;
-             //kdDebug() << "    Icon:          [" << disk->iconName() << "]" << endl;
-
-             u=s.left(s.find(BLANK));
-             disk->setKBSize(u.toInt() );
-             s=s.remove(0,s.find(BLANK)+1 );
-             //kdDebug() << "    Size:       [" << disk->kBSize() << "]" << endl;
-
-             u=s.left(s.find(BLANK));
-             disk->setKBUsed(u.toInt() );
-             s=s.remove(0,s.find(BLANK)+1 );
-             //kdDebug() << "    Used:       [" << disk->kBUsed() << "]" << endl;
-
-             u=s.left(s.find(BLANK));
-             disk->setKBAvail(u.toInt() );
-             s=s.remove(0,s.find(BLANK)+1 );
-             //kdDebug() << "    Avail:       [" << disk->kBAvail() << "]" << endl;
-
-
-             s=s.remove(0,s.find(BLANK)+1 );  // delete the capacity 94%
-             s=s.stripWhiteSpace();
-             disk->setMountPoint(s );
-
-             //kdDebug() << "    MountPoint:       [" << disk->mountPoint() << "]" << endl;
-
-             if ( (disk->kBSize() > 0) &&
-                  (!ignoreDisk(disk)))
-             {
-                 disk->setMounted(TRUE);    // its now mounted (df lists only mounted)
-                 replaceDeviceEntryMounted(disk);
-             } else
-                 delete disk;
-
-         }//if not header
-     }//while further lines available
-     for ( DiskEntry *disk=disks->first(); disk != 0; disk=disks->next() )
-     {
- 	if ( disk->fsType()=="supermount" && disk->deviceName() == "none")
- 	{
-            disk->setMounted(TRUE);
-#if 0
-             QDir dir(disk->mountPoint());
-             QStringList files = dir.entryList();
-             for ( QStringList::Iterator it = files.begin(); it != files.end(); ++it )
-             {
-                 if ( *it !="." && *it !="..")
-                 {
-                     disk->setMounted(TRUE);
-                     break;
-                 }
-             }
-#endif
- 	}
-     }
-
-     readingDFStdErrOut=FALSE;
-     loadSettings(); //to get the mountCommands
-     emit readDFDone();
-
+    return readMTAB();
 }
 
-
 void DiskList::replaceDeviceEntryMounted(DiskEntry *disk)
 {
 	//I'm assuming that df always returns the real device name, not a symlink
@@ -432,13 +328,10 @@ void DiskList::replaceDeviceEntryMounted
 			break;
 		}
 	}
-	//if( pos !=-1 )
-			delete disk;
-	//if (pos==-1)
-		//disks->append(disk);
-//	else
-//		delete disk;
-
+	if (pos==-1)
+            disks->append(disk);
+        else
+            delete disk;
 }
 
 /***************************************************************************
@@ -457,7 +350,6 @@ void DiskList::replaceDeviceEntry(DiskEn
   // never called.
   //
   //int pos=disks->find(disk);
-
   int pos = -1;
   for( u_int i=0; i<disks->count(); i++ )
   {
--- kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.h--	2003-09-09 17:42:00.000000000 -0400
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.h	2003-09-09 17:46:49.000000000 -0400
@@ -44,7 +44,7 @@
 #else
 #define DF_ARGS       "-k"
 #define NO_FS_TYPE    true
-#endif		
+#endif
 
 #ifdef _OS_SOLARIS_
 
@@ -75,8 +75,8 @@ class Disks : public DisksBase
  public:
   Disks(bool deepCopies=TRUE) { dc = deepCopies;};
   ~Disks() { clear(); };
-private: 
-  int compareItems( DiskEntry s1, DiskEntry s2 ) 
+private:
+  int compareItems( DiskEntry s1, DiskEntry s2 )
   {
     int ret = s1.deviceName().compare(s2.deviceName());
     if( ret == 0 )
@@ -109,7 +109,7 @@ class DiskList : public QObject
 public:
    DiskList( QObject *parent=0, const char *name=0 );
  ~DiskList();
-   int readFSTAB(); 
+   int readFSTAB();
    int readDF();
    int find(const DiskEntry* disk) {return disks->find(disk);};
    DiskEntry*  at(uint index) {return disks->at(index);};
@@ -126,22 +126,17 @@ public slots:
   void loadSettings();
   void applySettings();
   void loadExclusionLists();
-   
-private slots:
-   void receivedDFStdErrOut(KProcess *, char *data, int len);
-   void dfDone();
 
-private: 
+private:
   void replaceDeviceEntry(DiskEntry *disk);
   void replaceDeviceEntryMounted(DiskEntry *disk);
   bool ignoreDisk(DiskEntry *disk);
-
+    int readMTAB();
+    int parseMountFile( bool mtab );
   Disks            *disks;
-  KProcess         *dfProc;
-  QString           dfStringErrOut;
   bool              readingDFStdErrOut;
   KConfig           *config;
-  QPtrList<QRegExp> mountPointExclusionList; 
+  QPtrList<QRegExp> mountPointExclusionList;
 };
 /***************************************************************************/