-rw-r--r-- | library/storage.cpp | 139 | ||||
-rw-r--r-- | library/storage.h | 4 |
2 files changed, 118 insertions, 25 deletions
diff --git a/library/storage.cpp b/library/storage.cpp index f8b75d0..657fb71 100644 --- a/library/storage.cpp +++ b/library/storage.cpp @@ -53,21 +53,24 @@ static bool isCF(const QString& m) { #ifndef Q_OS_MACX FILE* f = fopen("/var/run/stab", "r"); 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 ) ) { + 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 ) { + if ( QString(devtype) == "ide" && m.find(devname)>0 ) + { fclose(f); return TRUE; } } } fclose(f); @@ -103,13 +106,14 @@ StorageInfo::StorageInfo( QObject *parent ) /*! Returns the longest matching FileSystem that starts with the same prefix as \a filename as its mount point. */ const FileSystem *StorageInfo::fileSystemOf( const QString &filename ) { - for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) { + for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) + { if ( filename.startsWith( (*i)->path() ) ) return (*i); } return 0; } @@ -136,61 +140,75 @@ void StorageInfo::update() QStringList curdisks; QStringList curopts; QStringList curfs; bool rebuild = FALSE; int n=0; - if ( mntfp ) { - while ( (me = getmntent( mntfp )) != 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 ) { + for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) + { + if ( (*i)->disk() == fs ) + { found = TRUE; break; } } if ( !found ) rebuild = TRUE; } } endmntent( mntfp ); } - if ( rebuild || n != (int)mFileSystems.count() ) { + 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) { + for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) + { QString opts = *optsIt; QString disk = *it; QString humanname; bool removable = FALSE; - if ( isCF(disk) ) { + if ( isCF(disk) ) + { humanname = tr("CF Card"); removable = TRUE; - } else if ( disk == "/dev/hda1" ) { + } + else if ( disk == "/dev/hda1" ) + { humanname = tr("Hard Disk"); - } else if ( disk.left(9) == "/dev/mmcd" ) { + } + else if ( disk.left(9) == "/dev/mmcd" ) + { humanname = tr("SD Card"); removable = TRUE; - } else if ( disk.left( 14 ) == "/dev/mmc/part1" ) { + } + else if ( disk.left( 14 ) == "/dev/mmc/part1" ) + { humanname = tr("MMC Card"); removable = TRUE; - } else if ( disk.left(7) == "/dev/hd" ) + } + 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" ) @@ -204,47 +222,55 @@ void StorageInfo::update() 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 { + } + else + { // just update them for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) i.current()->update(); } #endif } -bool deviceTab( const char *device) { +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 ){ + if ( ( count = getmntinfo( mntbufp, MNT_WAIT ) ) == 0 ) + { qWarning("deviceTab: Error in getmntinfo(): %s",strerror( errno ) ); hasDevice = false; } - for( int i = 0; i < count; i++ ){ + 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; FILE *mntfp = setmntent( "/etc/mtab", "r" ); - if ( mntfp ) { - while ( (me = getmntent( mntfp )) != 0 ) { + if ( mntfp ) + { + while ( (me = getmntent( mntfp )) != 0 ) + { QString deviceName = me->mnt_fsname; // qDebug(deviceName); - if( deviceName.left(name.length()) == name) { + if( deviceName.left(name.length()) == name) + { hasDevice = true; } } } endmntent( mntfp ); #endif /* Q_OS_MACX */ @@ -272,25 +298,85 @@ bool StorageInfo::hasSd() { return deviceTab("/dev/mmcd"); } /*! * @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; } +/*! +* @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; +} + /*! \fn const QList<FileSystem> &StorageInfo::fileSystems() const Returns a list of all available mounted file systems. \warning This may change in Qtopia 3.x to return only relevant Qtopia file systems (and ignore mount points such as /tmp) */ @@ -307,17 +393,20 @@ FileSystem::FileSystem( const QString &disk, const QString &path, const QString } void FileSystem::update() { #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) struct statfs fs; - if ( !statfs( fspath.latin1(), &fs ) ) { + if ( !statfs( fspath.latin1(), &fs ) ) + { blkSize = fs.f_bsize; totalBlks = fs.f_blocks; availBlks = fs.f_bavail; - } else { + } + else + { blkSize = 0; totalBlks = 0; availBlks = 0; } #endif } diff --git a/library/storage.h b/library/storage.h index 0a0698f..35a1109 100644 --- a/library/storage.h +++ b/library/storage.h @@ -34,12 +34,16 @@ public: 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(); public slots: void update(); |