-rw-r--r-- | library/storage.cpp | 343 | ||||
-rw-r--r-- | library/storage.h | 14 |
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 @@ -31,3 +31,3 @@ -#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) +#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) #include <sys/vfs.h> @@ -58,3 +58,4 @@ static bool isCF(const QString& m) if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); - if ( f ) { + if ( f ) + { char line[1024]; @@ -62,11 +63,13 @@ static bool isCF(const QString& m) 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; + } + } } @@ -80,3 +83,3 @@ static bool isCF(const QString& m) \brief The StorageInfo class describes the disks mounted on the file system. - + This class provides access to the mount information for the Linux @@ -94,3 +97,3 @@ static bool isCF(const QString& m) StorageInfo::StorageInfo( QObject *parent ) - : QObject( parent ) + : QObject( parent ) { @@ -99,3 +102,3 @@ StorageInfo::StorageInfo( QObject *parent ) connect( channel, SIGNAL(received(const QCString &, const QByteArray &)), - this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); + this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); update(); @@ -108,5 +111,6 @@ 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); } @@ -141,74 +145,90 @@ void StorageInfo::update() 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(); } @@ -217,30 +237,36 @@ void StorageInfo::update() -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; } @@ -277,3 +303,3 @@ bool StorageInfo::hasSd() * @fn static bool StorageInfo::hasMmc() - * @brief reutrns whether device has mmc mounted + * @brief returns whether device has mmc mounted * @@ -282,8 +308,68 @@ 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; } @@ -303,3 +389,3 @@ 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 ) { @@ -312,10 +398,13 @@ void FileSystem::update() 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; } @@ -326,3 +415,3 @@ void FileSystem::update() \brief The FileSystem class describes a single mount point. - + This class simply returns information about a mount point, including @@ -331,3 +420,3 @@ void FileSystem::update() \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 @@ -34,7 +34,11 @@ public: - 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: |