summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/storage.cpp343
-rw-r--r--library/storage.h14
2 files changed, 225 insertions, 132 deletions
diff --git a/library/storage.cpp b/library/storage.cpp
index f8b75d0..657fb71 100644
--- a/library/storage.cpp
+++ b/library/storage.cpp
@@ -30,5 +30,5 @@
#include <stdio.h>
-#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
#include <sys/vfs.h>
#include <mntent.h>
@@ -57,17 +57,20 @@ static bool isCF(const QString& m)
if (!f) f = fopen("/var/state/pcmcia/stab", "r");
if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
- if ( f ) {
+ if ( f )
+ {
char line[1024];
char devtype[80];
char devname[80];
- while ( fgets( line, 1024, f ) ) {
- // 0 ide ide-cs 0 hda 3 0
+ while ( fgets( line, 1024, f ) )
+ {
+ // 0 ide ide-cs 0 hda 3 0
if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
- {
- if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
- fclose(f);
- return TRUE;
- }
- }
+ {
+ if ( QString(devtype) == "ide" && m.find(devname)>0 )
+ {
+ fclose(f);
+ return TRUE;
+ }
+ }
}
fclose(f);
@@ -79,5 +82,5 @@ static bool isCF(const QString& m)
/*! \class StorageInfo storage.h
\brief The StorageInfo class describes the disks mounted on the file system.
-
+
This class provides access to the mount information for the Linux
filesystem. Each mount point is represented by the FileSystem class.
@@ -93,10 +96,10 @@ static bool isCF(const QString& m)
*/
StorageInfo::StorageInfo( QObject *parent )
- : QObject( parent )
+ : QObject( parent )
{
mFileSystems.setAutoDelete( TRUE );
channel = new QCopChannel( "QPE/Card", this );
connect( channel, SIGNAL(received(const QCString &, const QByteArray &)),
- this, SLOT(cardMessage( const QCString &, const QByteArray &)) );
+ this, SLOT(cardMessage( const QCString &, const QByteArray &)) );
update();
}
@@ -107,7 +110,8 @@ StorageInfo::StorageInfo( QObject *parent )
const FileSystem *StorageInfo::fileSystemOf( const QString &filename )
{
- for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
- if ( filename.startsWith( (*i)->path() ) )
- return (*i);
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ {
+ if ( filename.startsWith( (*i)->path() ) )
+ return (*i);
}
return 0;
@@ -140,108 +144,130 @@ void StorageInfo::update()
bool rebuild = FALSE;
int n=0;
- if ( mntfp ) {
- while ( (me = getmntent( mntfp )) != 0 ) {
- QString fs = me->mnt_fsname;
- if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
- || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
- || fs.left( 14 ) == "/dev/mmc/part1"
- || fs.left(5)=="tmpfs" || fs.left(9)=="/dev/root" )
- {
- n++;
- curdisks.append(fs);
- curopts.append( me->mnt_opts );
- //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts );
- curfs.append( me->mnt_dir );
- bool found = FALSE;
- for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
- if ( (*i)->disk() == fs ) {
- found = TRUE;
- break;
+ if ( mntfp )
+ {
+ while ( (me = getmntent( mntfp )) != 0 )
+ {
+ QString fs = me->mnt_fsname;
+ if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
+ || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
+ || fs.left( 14 ) == "/dev/mmc/part1"
+ || fs.left(5)=="tmpfs" || fs.left(9)=="/dev/root" )
+ {
+ n++;
+ curdisks.append(fs);
+ curopts.append( me->mnt_opts );
+ //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts );
+ curfs.append( me->mnt_dir );
+ bool found = FALSE;
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ {
+ if ( (*i)->disk() == fs )
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ if ( !found )
+ rebuild = TRUE;
+ }
}
+ endmntent( mntfp );
}
- if ( !found )
- rebuild = TRUE;
- }
- }
- endmntent( mntfp );
+ if ( rebuild || n != (int)mFileSystems.count() )
+ {
+ mFileSystems.clear();
+ QStringList::ConstIterator it=curdisks.begin();
+ QStringList::ConstIterator fsit=curfs.begin();
+ QStringList::ConstIterator optsIt=curopts.begin();
+ for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt)
+ {
+ QString opts = *optsIt;
+
+ QString disk = *it;
+ QString humanname;
+ bool removable = FALSE;
+ if ( isCF(disk) )
+ {
+ humanname = tr("CF Card");
+ removable = TRUE;
+ }
+ else if ( disk == "/dev/hda1" )
+ {
+ humanname = tr("Hard Disk");
+ }
+ else if ( disk.left(9) == "/dev/mmcd" )
+ {
+ humanname = tr("SD Card");
+ removable = TRUE;
+ }
+ else if ( disk.left( 14 ) == "/dev/mmc/part1" )
+ {
+ humanname = tr("MMC Card");
+ removable = TRUE;
+ }
+ else if ( disk.left(7) == "/dev/hd" )
+ humanname = tr("Hard Disk") + " " + disk;
+ else if ( disk.left(7) == "/dev/sd" )
+ humanname = tr("SCSI Hard Disk") + " " + disk;
+ else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
+ humanname = tr("Internal Memory");
+ else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
+ humanname = tr("Internal Storage");
+ else if ( disk.left(14) == "/dev/mtdblock/" )
+ humanname = tr("Internal Storage") + " " + disk;
+ else if ( disk.left(13) == "/dev/mtdblock" )
+ humanname = tr("Internal Storage") + " " + disk;
+ else if ( disk.left(9) == "/dev/root" )
+ humanname = tr("Internal Storage") + " " + disk;
+ else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs
+ humanname = tr("Internal Memory");
+ FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
+ mFileSystems.append( fs );
+ }
+ emit disksChanged();
}
- if ( rebuild || n != (int)mFileSystems.count() ) {
- mFileSystems.clear();
- QStringList::ConstIterator it=curdisks.begin();
- QStringList::ConstIterator fsit=curfs.begin();
- QStringList::ConstIterator optsIt=curopts.begin();
- for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) {
- QString opts = *optsIt;
-
- QString disk = *it;
- QString humanname;
- bool removable = FALSE;
- if ( isCF(disk) ) {
- humanname = tr("CF Card");
- removable = TRUE;
- } else if ( disk == "/dev/hda1" ) {
- humanname = tr("Hard Disk");
- } else if ( disk.left(9) == "/dev/mmcd" ) {
- humanname = tr("SD Card");
- removable = TRUE;
- } else if ( disk.left( 14 ) == "/dev/mmc/part1" ) {
- humanname = tr("MMC Card");
- removable = TRUE;
- } else if ( disk.left(7) == "/dev/hd" )
- humanname = tr("Hard Disk") + " " + disk;
- else if ( disk.left(7) == "/dev/sd" )
- humanname = tr("SCSI Hard Disk") + " " + disk;
- else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
- humanname = tr("Internal Memory");
- else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
- humanname = tr("Internal Storage");
- else if ( disk.left(14) == "/dev/mtdblock/" )
- humanname = tr("Internal Storage") + " " + disk;
- else if ( disk.left(13) == "/dev/mtdblock" )
- humanname = tr("Internal Storage") + " " + disk;
- else if ( disk.left(9) == "/dev/root" )
- humanname = tr("Internal Storage") + " " + disk;
- else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs
- humanname = tr("Internal Memory");
- FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
- mFileSystems.append( fs );
- }
- emit disksChanged();
- } else {
- // just update them
- for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
- i.current()->update();
+ else
+ {
+ // just update them
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ i.current()->update();
}
#endif
}
-bool deviceTab( const char *device) {
- QString name = device;
- bool hasDevice=false;
+bool deviceTab( const char *device)
+{
+ QString name = device;
+ bool hasDevice=false;
#ifdef Q_OS_MACX
- // Darwin (MacOS X)
- struct statfs** mntbufp;
- int count = 0;
- if ( ( count = getmntinfo( mntbufp, MNT_WAIT ) ) == 0 ){
- qWarning("deviceTab: Error in getmntinfo(): %s",strerror( errno ) );
- hasDevice = false;
- }
- for( int i = 0; i < count; i++ ){
- QString deviceName = mntbufp[i]->f_mntfromname;
- qDebug(deviceName);
- if( deviceName.left( name.length() ) == name )
- hasDevice = true;
- }
+ // Darwin (MacOS X)
+ struct statfs** mntbufp;
+ int count = 0;
+ if ( ( count = getmntinfo( mntbufp, MNT_WAIT ) ) == 0 )
+ {
+ qWarning("deviceTab: Error in getmntinfo(): %s",strerror( errno ) );
+ hasDevice = false;
+ }
+ for( int i = 0; i < count; i++ )
+ {
+ QString deviceName = mntbufp[i]->f_mntfromname;
+ qDebug(deviceName);
+ if( deviceName.left( name.length() ) == name )
+ hasDevice = true;
+ }
#else
- // Linux
- struct mntent *me;
+ // Linux
+ struct mntent *me;
FILE *mntfp = setmntent( "/etc/mtab", "r" );
- if ( mntfp ) {
- while ( (me = getmntent( mntfp )) != 0 ) {
- QString deviceName = me->mnt_fsname;
-// qDebug(deviceName);
- if( deviceName.left(name.length()) == name) {
- hasDevice = true;
+ if ( mntfp )
+ {
+ while ( (me = getmntent( mntfp )) != 0 )
+ {
+ QString deviceName = me->mnt_fsname;
+ // qDebug(deviceName);
+ if( deviceName.left(name.length()) == name)
+ {
+ hasDevice = true;
}
}
@@ -276,15 +302,75 @@ bool StorageInfo::hasSd()
/*!
* @fn static bool StorageInfo::hasMmc()
- * @brief reutrns whether device has mmc mounted
+ * @brief returns whether device has mmc mounted
*
*/
bool StorageInfo::hasMmc()
{
- bool hasMmc=false;
- if( deviceTab("/dev/mmc/part"))
- hasMmc=true;
- if( deviceTab("/dev/mmcd"))
- hasMmc=true;
- return hasMmc;
+ bool hasMmc=false;
+ if( deviceTab("/dev/mmc/part"))
+ hasMmc=true;
+ if( deviceTab("/dev/mmcd"))
+ hasMmc=true;
+ return hasMmc;
+}
+
+/*!
+* @fn QString StorageInfo::getCfPath()
+* @brief returns the Mount-Path of Cf Card
+*
+*/
+QString StorageInfo::getCfPath()
+{
+ QString r = "";
+
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ {
+ if ( (*i)->disk().left( 8 ) == "/dev/hda" )
+ {
+ r = (*i)->path();
+ break;
+ }
+ }
+ return r;
+}
+
+/*!
+* @fn QString StorageInfo::getSdPath()
+* @brief returns the Mount-Path of Sd Card
+*
+*/
+QString StorageInfo::getSdPath()
+{
+ QString r = "";
+
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ {
+ if ( (*i)->disk().left( 9 ) == "/dev/mmcd" )
+ {
+ r = (*i)->path();
+ break;
+ }
+ }
+ return r;
+}
+
+/*!
+* @fn QString StorageInfo::getMmcPath()
+* @brief returns the Mount-Path of Mmc Card
+*
+*/
+QString StorageInfo::getMmcPath()
+{
+ QString r = "";
+
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ {
+ if ( (*i)->disk().left( 14 ) == "/dev/mmc/part1" )
+ {
+ r = (*i)->path();
+ break;
+ }
+ }
+ return r;
}
@@ -302,5 +388,5 @@ bool StorageInfo::hasMmc()
FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o )
- : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
+ : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
{
update();
@@ -311,12 +397,15 @@ void FileSystem::update()
#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
struct statfs fs;
- if ( !statfs( fspath.latin1(), &fs ) ) {
- blkSize = fs.f_bsize;
- totalBlks = fs.f_blocks;
- availBlks = fs.f_bavail;
- } else {
- blkSize = 0;
- totalBlks = 0;
- availBlks = 0;
+ if ( !statfs( fspath.latin1(), &fs ) )
+ {
+ blkSize = fs.f_bsize;
+ totalBlks = fs.f_blocks;
+ availBlks = fs.f_bavail;
+ }
+ else
+ {
+ blkSize = 0;
+ totalBlks = 0;
+ availBlks = 0;
}
#endif
@@ -325,10 +414,10 @@ void FileSystem::update()
/*! \class FileSystem storage.h
\brief The FileSystem class describes a single mount point.
-
+
This class simply returns information about a mount point, including
file system name, mount point, human readable name, size information
and mount options information.
\ingroup qtopiaemb
-
+
\sa StorageInfo
*/
diff --git a/library/storage.h b/library/storage.h
index 0a0698f..35a1109 100644
--- a/library/storage.h
+++ b/library/storage.h
@@ -33,9 +33,13 @@ public:
StorageInfo( QObject *parent=0 );
- const QList<FileSystem> &fileSystems() const { return mFileSystems; }
- const FileSystem *fileSystemOf( const QString &filename );
- static bool hasCf();
- static bool hasSd();
- static bool hasMmc();
+ const QList<FileSystem> &fileSystems() const { return mFileSystems; }
+ const FileSystem *fileSystemOf( const QString &filename );
+ static bool hasCf();
+ static bool hasSd();
+ static bool hasMmc();
+
+ QString getCfPath();
+ QString getSdPath();
+ QString getMmcPath();
signals:
void disksChanged();