summaryrefslogtreecommitdiff
authoralwin <alwin>2005-03-07 14:32:58 (UTC)
committer alwin <alwin>2005-03-07 14:32:58 (UTC)
commit9ac0dc3c7b4e56f38c3cefce2e5699078aa3a357 (patch) (side-by-side diff)
tree9b8e96c6971ca8750a274f2542eed1272f4ec683
parentc26df8eafe66bded4a4af4f95830fd2187bfa2ca (diff)
downloadopie-9ac0dc3c7b4e56f38c3cefce2e5699078aa3a357.zip
opie-9ac0dc3c7b4e56f38c3cefce2e5699078aa3a357.tar.gz
opie-9ac0dc3c7b4e56f38c3cefce2e5699078aa3a357.tar.bz2
yes - scsi storage may be removeable devices!
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--library/storage.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/library/storage.cpp b/library/storage.cpp
index 9549ff3..e657573 100644
--- a/library/storage.cpp
+++ b/library/storage.cpp
@@ -111,195 +111,196 @@ const FileSystem *StorageInfo::fileSystemOf( const QString &filename )
return (*i);
}
return 0;
}
void StorageInfo::cardMessage( const QCString& msg, const QByteArray& )
{
if ( msg == "mtabChanged()" )
update();
}
/*! Updates the mount and free space available information for each mount
point. This method is automatically called when a disk is mounted or
unmounted.
*/
// cause of the lack of a d pointer we need
// to store informations in a config file :(
void StorageInfo::update()
{
//qDebug("StorageInfo::updating");
#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
struct mntent *me;
FILE *mntfp = setmntent( "/etc/mtab", "r" );
QStringList curdisks;
QStringList curopts;
QStringList curfs;
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(11)=="/dev/mmcblk"
|| 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 ( 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" || disk.left(11) == "/dev/mmcblk" )
{
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" )
+ else if ( disk.left(7) == "/dev/sd" ) {
humanname = tr("SCSI Hard Disk") + " " + disk;
- else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
+ removable = TRUE;
+ } 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();
}
#endif
}
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;
}
#else
// 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;
}
}
}
endmntent( mntfp );
#endif /* Q_OS_MACX */
return hasDevice;
}
/*!
* @fn static bool StorageInfo::hasCf()
* @brief returns whether device has Cf mounted
*
*/
bool StorageInfo::hasCf()
{
return deviceTab("/dev/hd");
}
/*!
* @fn static bool StorageInfo::hasSd()
* @brief returns whether device has SD mounted
*
*/
bool StorageInfo::hasSd()
{
return deviceTab("/dev/mmcd");
}
/*!
* @fn static bool StorageInfo::hasMmc()
* @brief returns whether device has mmc mounted
*
*/
bool StorageInfo::hasMmc()
{