--- 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