summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/storage.cpp61
-rw-r--r--library/storage.h8
2 files changed, 65 insertions, 4 deletions
diff --git a/library/storage.cpp b/library/storage.cpp
index a7c466d..912b22d 100644
--- a/library/storage.cpp
+++ b/library/storage.cpp
@@ -1,63 +1,68 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) Holger 'zecke' Freyther <freyther@kde.org> 2** Copyright (C) Holger 'zecke' Freyther <freyther@kde.org>
3** Copyright (C) Lorn Potter <llornkcor@handhelds.org>
3** Copyright (C) 2000 Trolltech AS. All rights reserved. 4** Copyright (C) 2000 Trolltech AS. All rights reserved.
4** 5**
5** This file is part of Qtopia Environment. 6** This file is part of Opie Environment.
6** 7**
7** This file may be distributed and/or modified under the terms of the 8** This file may be distributed and/or modified under the terms of the
8** GNU General Public License version 2 as published by the Free Software 9** GNU General Public License version 2 as published by the Free Software
9** Foundation and appearing in the file LICENSE.GPL included in the 10** Foundation and appearing in the file LICENSE.GPL included in the
10** packaging of this file. 11** packaging of this file.
11** 12**
12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14** 15**
15** See http://www.trolltech.com/gpl/ for GPL licensing information. 16** See http://www.trolltech.com/gpl/ for GPL licensing information.
16** 17**
17** Contact info@trolltech.com if any conditions of this licensing are 18** Contact info@trolltech.com if any conditions of this licensing are
18** not clear to you. 19** not clear to you.
19** 20**
20**********************************************************************/ 21**********************************************************************/
21 22
22#include <qpe/storage.h> 23#include <qpe/storage.h>
23#ifdef QT_QWS_SL5XXX 24#ifdef QT_QWS_SL5XXX
24#include <qpe/custom.h> 25#include <qpe/custom.h>
25#endif 26#endif
26 27
27#include <qfile.h> 28#include <qfile.h>
28#include <qtimer.h> 29#include <qtimer.h>
29#include <qcopchannel_qws.h> 30#include <qcopchannel_qws.h>
30 31
31#include <stdio.h> 32#include <stdio.h>
32 33
33#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 34#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
34#include <sys/vfs.h> 35#include <sys/vfs.h>
35#include <mntent.h> 36#include <mntent.h>
36#endif 37#endif
37 38
38#include <qstringlist.h> 39#include <qstringlist.h>
39 40
41#include <sys/vfs.h>
42#include <mntent.h>
43
44
40static bool isCF(const QString& m) 45static bool isCF(const QString& m)
41{ 46{
42 FILE* f = fopen("/var/run/stab", "r"); 47 FILE* f = fopen("/var/run/stab", "r");
43 if (!f) f = fopen("/var/state/pcmcia/stab", "r"); 48 if (!f) f = fopen("/var/state/pcmcia/stab", "r");
44 if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); 49 if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
45 if ( f ) { 50 if ( f ) {
46 char line[1024]; 51 char line[1024];
47 char devtype[80]; 52 char devtype[80];
48 char devname[80]; 53 char devname[80];
49 while ( fgets( line, 1024, f ) ) { 54 while ( fgets( line, 1024, f ) ) {
50 // 0 ide ide-cs 0 hda 3 0 55 // 0 ide ide-cs 0 hda 3 0
51 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) 56 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
52 { 57 {
53 if ( QString(devtype) == "ide" && m.find(devname)>0 ) { 58 if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
54 fclose(f); 59 fclose(f);
55 return TRUE; 60 return TRUE;
56 } 61 }
57 } 62 }
58 } 63 }
59 fclose(f); 64 fclose(f);
60 } 65 }
61 return FALSE; 66 return FALSE;
62} 67}
63 68
@@ -153,48 +158,102 @@ void StorageInfo::update()
153 else if ( disk.left(7) == "/dev/sd" ) 158 else if ( disk.left(7) == "/dev/sd" )
154 humanname = tr("SCSI Hard Disk") + " " + disk; 159 humanname = tr("SCSI Hard Disk") + " " + disk;
155 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs 160 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
156 humanname = tr("Internal Memory"); 161 humanname = tr("Internal Memory");
157 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" ) 162 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
158 humanname = tr("Internal Storage"); 163 humanname = tr("Internal Storage");
159 else if ( disk.left(14) == "/dev/mtdblock/" ) 164 else if ( disk.left(14) == "/dev/mtdblock/" )
160 humanname = tr("Internal Storage") + " " + disk; 165 humanname = tr("Internal Storage") + " " + disk;
161 else if ( disk.left(13) == "/dev/mtdblock" ) 166 else if ( disk.left(13) == "/dev/mtdblock" )
162 humanname = tr("Internal Storage") + " " + disk; 167 humanname = tr("Internal Storage") + " " + disk;
163 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs 168 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs
164 humanname = tr("Internal Memory"); 169 humanname = tr("Internal Memory");
165 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts ); 170 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
166 mFileSystems.append( fs ); 171 mFileSystems.append( fs );
167 } 172 }
168 emit disksChanged(); 173 emit disksChanged();
169 } else { 174 } else {
170 // just update them 175 // just update them
171 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) 176 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
172 i.current()->update(); 177 i.current()->update();
173 } 178 }
174#endif 179#endif
175} 180}
176 181
182bool deviceTab( const char *device) {
183 QString name = device;
184 bool hasDevice=false;
185 struct mntent *me;
186 FILE *mntfp = setmntent( "/etc/mtab", "r" );
187 if ( mntfp ) {
188 while ( (me = getmntent( mntfp )) != 0 ) {
189 QString deviceName = me->mnt_fsname;
190// qDebug(deviceName);
191 if( deviceName.left(name.length()) == name) {
192 hasDevice = true;
193 }
194 }
195 }
196 endmntent( mntfp );
197 return hasDevice;
198}
199
200/*!
201 * @fn hasCf()
202 * @brief returns whether device has Cf mounted
203 *
204 */
205bool StorageInfo::hasCf()
206{
207 return deviceTab("/dev/hd");
208}
209
210/*!
211 * @fn hasSd()
212 * @brief returns whether device has SD mounted
213 *
214 */
215bool StorageInfo::hasSd()
216{
217 return deviceTab("/dev/mmcd");
218}
219
220/*!
221 * @fn hasMmc()
222 * @brief reutrns whether device has mmc mounted
223 *
224 */
225bool StorageInfo::hasMmc()
226{
227 bool hasMmc=false;
228 if( deviceTab("/dev/mmc/part"))
229 hasMmc=true;
230 if( deviceTab("/dev/mmcd"))
231 hasMmc=true;
232 return hasMmc;
233}
234
235
177//--------------------------------------------------------------------------- 236//---------------------------------------------------------------------------
178 237
179FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o ) 238FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o )
180 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o ) 239 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
181{ 240{
182 update(); 241 update();
183} 242}
184 243
185void FileSystem::update() 244void FileSystem::update()
186{ 245{
187#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 246#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
188 struct statfs fs; 247 struct statfs fs;
189 if ( !statfs( fspath.latin1(), &fs ) ) { 248 if ( !statfs( fspath.latin1(), &fs ) ) {
190 blkSize = fs.f_bsize; 249 blkSize = fs.f_bsize;
191 totalBlks = fs.f_blocks; 250 totalBlks = fs.f_blocks;
192 availBlks = fs.f_bavail; 251 availBlks = fs.f_bavail;
193 } else { 252 } else {
194 blkSize = 0; 253 blkSize = 0;
195 totalBlks = 0; 254 totalBlks = 0;
196 availBlks = 0; 255 availBlks = 0;
197 } 256 }
198#endif 257#endif
199} 258}
200 259
diff --git a/library/storage.h b/library/storage.h
index 66a9f9d..0a0698f 100644
--- a/library/storage.h
+++ b/library/storage.h
@@ -11,51 +11,53 @@
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef __storage_h__ 20#ifndef __storage_h__
21#define __storage_h__ 21#define __storage_h__
22 22
23#include <qobject.h> 23#include <qobject.h>
24#include <qlist.h> 24#include <qlist.h>
25 25
26class FileSystem; 26class FileSystem;
27class QCopChannel; 27class QCopChannel;
28 28
29class StorageInfo : public QObject 29class StorageInfo : public QObject
30{ 30{
31 Q_OBJECT 31 Q_OBJECT
32public: 32public:
33 StorageInfo( QObject *parent=0 ); 33 StorageInfo( QObject *parent=0 );
34 34
35 const QList<FileSystem> &fileSystems() const { return mFileSystems; } 35 const QList<FileSystem> &fileSystems() const { return mFileSystems; }
36 const FileSystem *fileSystemOf( const QString &filename ); 36 const FileSystem *fileSystemOf( const QString &filename );
37 37 static bool hasCf();
38 static bool hasSd();
39 static bool hasMmc();
38signals: 40signals:
39 void disksChanged(); 41 void disksChanged();
40 42
41public slots: 43public slots:
42 void update(); 44 void update();
43 45
44private slots: 46private slots:
45 void cardMessage( const QCString& msg, const QByteArray& data ); 47 void cardMessage( const QCString& msg, const QByteArray& data );
46private: 48private:
47 QList<FileSystem> mFileSystems; 49 QList<FileSystem> mFileSystems;
48 QCopChannel *channel; 50 QCopChannel *channel;
49}; 51};
50 52
51class FileSystem 53class FileSystem
52{ 54{
53public: 55public:
54 const QString &disk() const { return fsdisk; } 56 const QString &disk() const { return fsdisk; }
55 const QString &path() const { return fspath; } 57 const QString &path() const { return fspath; }
56 const QString &name() const { return humanname; } 58 const QString &name() const { return humanname; }
57 const QString &options() const { return opts; } 59 const QString &options() const { return opts; }
58 long blockSize() const { return blkSize; } 60 long blockSize() const { return blkSize; }
59 long totalBlocks() const { return totalBlks; } 61 long totalBlocks() const { return totalBlks; }
60 long availBlocks() const { return availBlks; } 62 long availBlocks() const { return availBlks; }
61 bool isRemovable() const { return removable; } 63 bool isRemovable() const { return removable; }