summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/storage.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/library/storage.cpp b/library/storage.cpp
index 35e0255..937908d 100644
--- a/library/storage.cpp
+++ b/library/storage.cpp
@@ -1,196 +1,200 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) Holger 'zecke' Freyther <freyther@kde.org> 2** Copyright (C) Holger 'zecke' Freyther <freyther@kde.org>
3** Copyright (C) 2000 Trolltech AS. All rights reserved. 3** Copyright (C) 2000 Trolltech AS. All rights reserved.
4** 4**
5** This file is part of Qtopia Environment. 5** This file is part of Qtopia Environment.
6** 6**
7** This file may be distributed and/or modified under the terms of the 7** 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 8** GNU General Public License version 2 as published by the Free Software
9** Foundation and appearing in the file LICENSE.GPL included in the 9** Foundation and appearing in the file LICENSE.GPL included in the
10** packaging of this file. 10** packaging of this file.
11** 11**
12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12** 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. 13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14** 14**
15** See http://www.trolltech.com/gpl/ for GPL licensing information. 15** See http://www.trolltech.com/gpl/ for GPL licensing information.
16** 16**
17** Contact info@trolltech.com if any conditions of this licensing are 17** Contact info@trolltech.com if any conditions of this licensing are
18** not clear to you. 18** not clear to you.
19** 19**
20**********************************************************************/ 20**********************************************************************/
21 21
22#include <qpe/storage.h> 22#include <qpe/storage.h>
23#ifdef QT_QWS_CUSTOM 23#ifdef QT_QWS_CUSTOM
24#include <qpe/custom.h> 24#include <qpe/custom.h>
25#endif 25#endif
26 26
27#include <qfile.h> 27#include <qfile.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qcopchannel_qws.h> 29#include <qcopchannel_qws.h>
30 30
31#include <stdio.h> 31#include <stdio.h>
32 32
33#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 33#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
34#include <sys/vfs.h> 34#include <sys/vfs.h>
35#include <mntent.h> 35#include <mntent.h>
36#endif 36#endif
37 37
38#include <qstringlist.h> 38#include <qstringlist.h>
39 39
40static bool isCF(const QString& m) 40static bool isCF(const QString& m)
41{ 41{
42 FILE* f = fopen("/var/run/stab", "r"); 42 FILE* f = fopen("/var/run/stab", "r");
43 if (!f) f = fopen("/var/state/pcmcia/stab", "r"); 43 if (!f) f = fopen("/var/state/pcmcia/stab", "r");
44 if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); 44 if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
45 if ( f ) { 45 if ( f ) {
46 char line[1024]; 46 char line[1024];
47 char devtype[80]; 47 char devtype[80];
48 char devname[80]; 48 char devname[80];
49 while ( fgets( line, 1024, f ) ) { 49 while ( fgets( line, 1024, f ) ) {
50 // 0 ide ide-cs 0 hda 3 0 50 // 0 ide ide-cs 0 hda 3 0
51 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) 51 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
52 { 52 {
53 if ( QString(devtype) == "ide" && m.find(devname)>0 ) { 53 if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
54 fclose(f); 54 fclose(f);
55 return TRUE; 55 return TRUE;
56 } 56 }
57 } 57 }
58 } 58 }
59 fclose(f); 59 fclose(f);
60 } 60 }
61 return FALSE; 61 return FALSE;
62} 62}
63 63
64StorageInfo::StorageInfo( QObject *parent ) 64StorageInfo::StorageInfo( QObject *parent )
65 : QObject( parent ) 65 : QObject( parent )
66{ 66{
67 mFileSystems.setAutoDelete( TRUE ); 67 mFileSystems.setAutoDelete( TRUE );
68 channel = new QCopChannel( "QPE/Card", this ); 68 channel = new QCopChannel( "QPE/Card", this );
69 connect( channel, SIGNAL(received(const QCString &, const QByteArray &)), 69 connect( channel, SIGNAL(received(const QCString &, const QByteArray &)),
70 this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); 70 this, SLOT(cardMessage( const QCString &, const QByteArray &)) );
71 update(); 71 update();
72} 72}
73 73
74const FileSystem *StorageInfo::fileSystemOf( const QString &filename ) 74const FileSystem *StorageInfo::fileSystemOf( const QString &filename )
75{ 75{
76 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) { 76 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
77 if ( filename.startsWith( (*i)->path() ) ) 77 if ( filename.startsWith( (*i)->path() ) )
78 return (*i); 78 return (*i);
79 } 79 }
80 return 0; 80 return 0;
81} 81}
82 82
83 83
84void StorageInfo::cardMessage( const QCString& msg, const QByteArray& ) 84void StorageInfo::cardMessage( const QCString& msg, const QByteArray& )
85{ 85{
86 if ( msg == "mtabChanged()" ) 86 if ( msg == "mtabChanged()" )
87 update(); 87 update();
88} 88}
89// cause of the lack of a d pointer we need 89// cause of the lack of a d pointer we need
90// to store informations in a config file :( 90// to store informations in a config file :(
91void StorageInfo::update() 91void StorageInfo::update()
92{ 92{
93 //qDebug("StorageInfo::updating"); 93 //qDebug("StorageInfo::updating");
94#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 94#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
95 struct mntent *me; 95 struct mntent *me;
96 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 96 FILE *mntfp = setmntent( "/etc/mtab", "r" );
97 97
98 QStringList curdisks; 98 QStringList curdisks;
99 QStringList curopts; 99 QStringList curopts;
100 QStringList curfs; 100 QStringList curfs;
101 bool rebuild = FALSE; 101 bool rebuild = FALSE;
102 int n=0; 102 int n=0;
103 if ( mntfp ) { 103 if ( mntfp ) {
104 while ( (me = getmntent( mntfp )) != 0 ) { 104 while ( (me = getmntent( mntfp )) != 0 ) {
105 QString fs = me->mnt_fsname; 105 QString fs = me->mnt_fsname;
106 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" 106 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
107 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" 107 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
108 || fs.left(5)=="tmpfs" ) 108 || fs.left( 14 ) == "/dev/mmc/part1"
109 || fs.left(5)=="tmpfs" )
109 { 110 {
110 n++; 111 n++;
111 curdisks.append(fs); 112 curdisks.append(fs);
112 curopts.append( me->mnt_opts ); 113 curopts.append( me->mnt_opts );
113 //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts ); 114 //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts );
114 curfs.append( me->mnt_dir ); 115 curfs.append( me->mnt_dir );
115 bool found = FALSE; 116 bool found = FALSE;
116 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) { 117 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
117 if ( (*i)->disk() == fs ) { 118 if ( (*i)->disk() == fs ) {
118 found = TRUE; 119 found = TRUE;
119 break; 120 break;
120 } 121 }
121 } 122 }
122 if ( !found ) 123 if ( !found )
123 rebuild = TRUE; 124 rebuild = TRUE;
124 } 125 }
125 } 126 }
126 endmntent( mntfp ); 127 endmntent( mntfp );
127 } 128 }
128 if ( rebuild || n != (int)mFileSystems.count() ) { 129 if ( rebuild || n != (int)mFileSystems.count() ) {
129 mFileSystems.clear(); 130 mFileSystems.clear();
130 QStringList::ConstIterator it=curdisks.begin(); 131 QStringList::ConstIterator it=curdisks.begin();
131 QStringList::ConstIterator fsit=curfs.begin(); 132 QStringList::ConstIterator fsit=curfs.begin();
132 QStringList::ConstIterator optsIt=curopts.begin(); 133 QStringList::ConstIterator optsIt=curopts.begin();
133 for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) { 134 for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) {
134 QString opts = *optsIt; 135 QString opts = *optsIt;
135 136
136 QString disk = *it; 137 QString disk = *it;
137 QString humanname; 138 QString humanname;
138 bool removable = FALSE; 139 bool removable = FALSE;
139 if ( isCF(disk) ) { 140 if ( isCF(disk) ) {
140 humanname = tr("CF Card"); 141 humanname = tr("CF Card");
141 removable = TRUE; 142 removable = TRUE;
142 } else if ( disk == "/dev/hda1" ) { 143 } else if ( disk == "/dev/hda1" ) {
143 humanname = tr("Hard Disk"); 144 humanname = tr("Hard Disk");
144 } else if ( disk.left(9) == "/dev/mmcd" ) { 145 } else if ( disk.left(9) == "/dev/mmcd" ) {
145 humanname = tr("SD Card"); 146 humanname = tr("SD Card");
146 removable = TRUE; 147 removable = TRUE;
148 } else if ( disk.left( 14 ) == "/dev/mmc/part1" ) {
149 humanname = tr("MMC Card");
150 removable = TRUE;
147 } else if ( disk.left(7) == "/dev/hd" ) 151 } else if ( disk.left(7) == "/dev/hd" )
148 humanname = tr("Hard Disk") + " " + disk; 152 humanname = tr("Hard Disk") + " " + disk;
149 else if ( disk.left(7) == "/dev/sd" ) 153 else if ( disk.left(7) == "/dev/sd" )
150 humanname = tr("SCSI Hard Disk") + " " + disk; 154 humanname = tr("SCSI Hard Disk") + " " + disk;
151 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs 155 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
152 humanname = tr("Internal Memory"); 156 humanname = tr("Internal Memory");
153 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" ) 157 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
154 humanname = tr("Internal Storage"); 158 humanname = tr("Internal Storage");
155 else if ( disk.left(14) == "/dev/mtdblock/" ) 159 else if ( disk.left(14) == "/dev/mtdblock/" )
156 humanname = tr("Internal Storage") + " " + disk; 160 humanname = tr("Internal Storage") + " " + disk;
157 else if ( disk.left(13) == "/dev/mtdblock" ) 161 else if ( disk.left(13) == "/dev/mtdblock" )
158 humanname = tr("Internal Storage") + " " + disk; 162 humanname = tr("Internal Storage") + " " + disk;
159 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs 163 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs
160 humanname = tr("Internal Memory"); 164 humanname = tr("Internal Memory");
161 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts ); 165 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
162 mFileSystems.append( fs ); 166 mFileSystems.append( fs );
163 } 167 }
164 emit disksChanged(); 168 emit disksChanged();
165 } else { 169 } else {
166 // just update them 170 // just update them
167 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) 171 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
168 i.current()->update(); 172 i.current()->update();
169 } 173 }
170#endif 174#endif
171} 175}
172 176
173//--------------------------------------------------------------------------- 177//---------------------------------------------------------------------------
174 178
175FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o ) 179FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o )
176 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o ) 180 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
177{ 181{
178 update(); 182 update();
179} 183}
180 184
181void FileSystem::update() 185void FileSystem::update()
182{ 186{
183#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 187#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
184 struct statfs fs; 188 struct statfs fs;
185 if ( !statfs( fspath.latin1(), &fs ) ) { 189 if ( !statfs( fspath.latin1(), &fs ) ) {
186 blkSize = fs.f_bsize; 190 blkSize = fs.f_bsize;
187 totalBlks = fs.f_blocks; 191 totalBlks = fs.f_blocks;
188 availBlks = fs.f_bavail; 192 availBlks = fs.f_bavail;
189 } else { 193 } else {
190 blkSize = 0; 194 blkSize = 0;
191 totalBlks = 0; 195 totalBlks = 0;
192 availBlks = 0; 196 availBlks = 0;
193 } 197 }
194#endif 198#endif
195} 199}
196 200