Sophie

Sophie

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

kdebase-3.4.2-55mdk.src.rpm

--- kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.cpp.device_on_desktop	2003-08-22 11:51:00.000000000 +0200
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.cpp	2003-08-22 14:47:11.000000000 +0200
@@ -24,14 +24,14 @@
  */
 
 #include <config.h>
-
+#include <qdir.h>
 #include <math.h>
 #include <stdlib.h>
 
 #include <kapplication.h>
 
 #include "disklist.h"
-
+#include <iostream.h>
 #define BLANK ' '
 #define DELIMITER '#'
 #define FULL_PERCENT 95.0
@@ -99,6 +99,7 @@ if (NO_FS_TYPE)
 **/
 DiskList::~DiskList()
 {
+    delete dfProc;
 }
 
 
@@ -214,7 +215,7 @@ int DiskList::readFSTAB()
     QString s;
     DiskEntry *disk;
 
-    //disks->clear(); // ############
+    disks->clear(); // ############
 
     while (! t.eof()) {
       s=t.readLine();
@@ -226,7 +227,7 @@ int DiskList::readFSTAB()
         disk->setMounted(FALSE);
         disk->setDeviceName(s.left(s.find(BLANK)) );
             s=s.remove(0,s.find(BLANK)+1 );
-	    //  kdDebug() << "    deviceName:    [" << disk->deviceName() << "]" << endl;
+            //kdDebug() << "    deviceName:    [" << disk->deviceName() << "]" << endl;
 #ifdef _OS_SOLARIS_
             //device to fsck
             s=s.remove(0,s.find(BLANK)+1 );
@@ -241,10 +242,18 @@ int DiskList::readFSTAB()
          disk->setMountOptions(s.left(s.find(BLANK)) );
             s=s.remove(0,s.find(BLANK)+1 );
 	    //kdDebug() << "    Mount-Options: [" << disk->mountOptions() << "]" << endl;
-	 if (!ignoreDisk(disk))
-	   replaceDeviceEntry(disk);
-         else
-           delete disk;
+            if( disk->mountOptions().find("user")==-1 &&
+                !(disk->fsType()=="supermount" && disk->deviceName()=="none"))
+            {
+                delete disk;
+            }
+            else
+            {
+                if (!ignoreDisk(disk))
+                    replaceDeviceEntry(disk);
+                else
+                    delete disk;
+            }
 
       } //if not empty
     } //while
@@ -253,31 +262,38 @@ int DiskList::readFSTAB()
 #endif
 
   loadSettings(); //to get the mountCommands
-
-  //  kdDebug() << "DiskList::readFSTAB DONE" << endl;
   return 1;
 }
 
 bool DiskList::ignoreDisk(DiskEntry *disk)
 {
 	bool ignore;
-	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;
+        if ( disk->fsType()=="supermount" && disk->deviceName() == "none")
+	{
+            emit scanDevice(disk->mountPoint());
+            ignore = false;
+	}
 	else
-		ignore=true;
-
+	{
+		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 (exp->search(disk->mountPoint())!=-1) 
+                        if( disk->mountOptions().find("user")!=-1)
+                            return false;
+			if (exp->search(disk->mountPoint())!=-1)
 			{
 				kdDebug()<<"IGNORING BECAUSE OF REGEXP SEARCH"<<endl;
 				return true;
@@ -286,7 +302,7 @@ bool DiskList::ignoreDisk(DiskEntry *dis
 	}
 
 	return ignore;
-}		
+}
 
 
 
@@ -327,7 +343,7 @@ int DiskList::readDF()
     kdWarning(7020)<<i18n("could not execute [%1]").arg(DF_COMMAND)<<endl;
     return 0;
   }
-  
+
   return 1;
 }
 
@@ -337,84 +353,102 @@ int DiskList::readDF()
 **/
 void DiskList::dfDone()
 {
-  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
+     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")
+ 	{
+             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;
+                 }
+             }
+ 	}
+     }
+
+     readingDFStdErrOut=FALSE;
+     loadSettings(); //to get the mountCommands
+     emit readDFDone();
 
-  readingDFStdErrOut=FALSE;
-  loadSettings(); //to get the mountCommands
-  emit readDFDone();
 }
 
 
@@ -424,8 +458,7 @@ void DiskList::replaceDeviceEntryMounted
 	int pos = -1;
 	for( u_int i=0; i<disks->count(); i++ ) {
 		DiskEntry *item=disks->at(i);
-		if ( ((
-			(item->realDeviceName()==disk->deviceName()) ) ||
+		if ( (( (item->realDeviceName()==disk->deviceName()) ) ||
 			((item->inodeType()==true) &&
 			(disk->inodeType()==true) &&
 			(disk->inode()==item->inode()))) &&
@@ -435,11 +468,13 @@ void DiskList::replaceDeviceEntryMounted
 			break;
 		}
 	}
-	if (pos==-1)
-		disks->append(disk);
-	else
-		delete disk;
-	
+	//if( pos !=-1 )
+			delete disk;
+	//if (pos==-1)
+		//disks->append(disk);
+//	else
+//		delete disk;
+
 }
 
 /***************************************************************************
@@ -459,7 +494,6 @@ void DiskList::replaceDeviceEntry(DiskEn
   //
   //int pos=disks->find(disk);
 
-  kdDebug()<<"Trying to find an item referencing: "<<disk->deviceName()<<endl;
   int pos = -1;
   for( u_int i=0; i<disks->count(); i++ )
   {
@@ -516,7 +550,6 @@ void DiskList::replaceDeviceEntry(DiskEn
         disk->setFsType(olddisk->fsType());
   }
 #endif
-
   if (pos != -1) {  // replace
       DiskEntry * olddisk = disks->at(pos);
       if ( (-1!=olddisk->mountOptions().find("user")) &&
@@ -548,10 +581,19 @@ void DiskList::replaceDeviceEntry(DiskEn
 	  }
       disks->remove(pos); // really deletes old one
       disks->insert(pos,disk);
-  } else {
-    disks->append(disk);
+  }
+//#if 0
+  else
+  {
+      //install just device acces
+      if( (disk->fsType()=="supermount" )
+          || (disk->fsType().find("nfs",0,FALSE)!=-1 )
+          || (disk->mountOptions().find("user")!=-1))
+          disks->append(disk);
+      else
+          delete disk;
   }//if
-
+//#endif
 }
 
 #include "disklist.moc"
--- kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.h.device_on_desktop	2003-08-22 11:51:00.000000000 +0200
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/disklist.h	2003-08-22 14:47:11.000000000 +0200
@@ -120,6 +120,7 @@ public:
 signals:
    void readDFDone();
    void criticallyFull(DiskEntry *disk);
+   void scanDevice( const QString &device );
 
 public slots:
   void loadSettings();
--- kdebase-3.1.3/kioslave/devices/kdedmodule/mountwatcher.cpp.device_on_desktop	2003-08-22 11:51:00.000000000 +0200
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/mountwatcher.cpp	2003-08-22 14:47:11.000000000 +0200
@@ -44,6 +44,8 @@ MountWatcherModule::MountWatcherModule(c
     : KDEDModule(obj),mDiskList(this),mtabsize(0)
 {
 	firstTime=true;
+        connect(&mDiskList,SIGNAL(scanDevice( const QString &)),this,SLOT(slotScanDevice(const QString&)));
+
 	mDiskList.readFSTAB();
 	mDiskList.readDF();
 
@@ -70,6 +72,18 @@ MountWatcherModule::~MountWatcherModule(
 {
 }
 
+void MountWatcherModule::slotScanDevice(const QString &device)
+{
+#if 0
+    if( !KDirWatch::self()->contains(device))
+    {
+        KDirWatch::self()->addDir(device);
+        connect(KDirWatch::self(),SIGNAL(dirty(const QString&)),this,SLOT(dirtySupermountPoint(const QString&)));
+        KDirWatch::self()->startScan();
+    }
+#endif
+}
+
 uint MountWatcherModule::mountpointMappingCount()
 {
 	return mDiskList.count();
@@ -120,6 +134,12 @@ void MountWatcherModule::reloadExclusion
 
 }
 
+void MountWatcherModule::dirtySupermountPoint(const QString&)
+{
+    mDiskList.readFSTAB();
+    mDiskList.readDF();
+}
+
 void MountWatcherModule::dirty(const QString& str)
 {
 #ifdef MTAB
@@ -146,6 +166,7 @@ void MountWatcherModule::dirty(const QSt
 		return;
 	}
 #endif
+
 }
 
 QStringList MountWatcherModule::basicDeviceInfo(QString name)
@@ -177,7 +198,7 @@ QStringList MountWatcherModule::basicDev
 {
 	QStringList tmp;
 	for (QStringList::Iterator it=mountList.begin();it!=mountList.end();)
-	{	
+	{
 		QString name=(*it);++it;
 		QString description=(*it); ++it;
 		QString device=(*it); ++it;
--- kdebase-3.1.3/kioslave/devices/kdedmodule/mountwatcher.h.device_on_desktop	2003-08-22 11:51:00.000000000 +0200
+++ kdebase-3.1.3/kioslave/devices/kdedmodule/mountwatcher.h	2003-08-22 14:47:11.000000000 +0200
@@ -27,7 +27,7 @@
 #include <qmap.h>
 
 
-struct specialEntry 
+struct specialEntry
 {
 	QString id;
 	QString description;
@@ -59,7 +59,7 @@ k_dcop:
     QString mountpoint(QString name);
     QString devicenode(int id);
     QString type(int id);
-    bool    mounted(int id);    
+    bool    mounted(int id);
     bool    mounted(QString name);
     QStringList basicList();
     QStringList basicDeviceInfo(QString);
@@ -74,8 +74,10 @@ k_dcop_signals:
 
 
 protected slots:
+    void dirtySupermountPoint(const QString&);
 	void dirty(const QString&);
 	void readDFDone();
+    void slotScanDevice(const QString &device);
 };
 
 #endif