summaryrefslogtreecommitdiff
authoralwin <alwin>2005-03-07 14:32:58 (UTC)
committer alwin <alwin>2005-03-07 14:32:58 (UTC)
commit9ac0dc3c7b4e56f38c3cefce2e5699078aa3a357 (patch) (unidiff)
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) (ignore 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
@@ -15,387 +15,388 @@
15** 15**
16** See http://www.trolltech.com/gpl/ for GPL licensing information. 16** See http://www.trolltech.com/gpl/ for GPL licensing information.
17** 17**
18** Contact info@trolltech.com if any conditions of this licensing are 18** Contact info@trolltech.com if any conditions of this licensing are
19** not clear to you. 19** not clear to you.
20** 20**
21**********************************************************************/ 21**********************************************************************/
22 22
23#include <qpe/storage.h> 23#include <qpe/storage.h>
24 24
25#include <qcopchannel_qws.h> 25#include <qcopchannel_qws.h>
26 26
27#include <stdio.h> 27#include <stdio.h>
28 28
29#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 29#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
30#include <sys/vfs.h> 30#include <sys/vfs.h>
31#include <mntent.h> 31#include <mntent.h>
32#endif 32#endif
33 33
34#ifdef Q_OS_MACX 34#ifdef Q_OS_MACX
35# include <sys/param.h> 35# include <sys/param.h>
36# include <sys/ucred.h> 36# include <sys/ucred.h>
37# include <sys/mount.h> 37# include <sys/mount.h>
38# include <stdio.h> // For strerror() 38# include <stdio.h> // For strerror()
39# include <errno.h> 39# include <errno.h>
40#endif /* Q_OS_MACX */ 40#endif /* Q_OS_MACX */
41 41
42 42
43// Shouldn't be here ! (eilers) 43// Shouldn't be here ! (eilers)
44// #include <sys/vfs.h> 44// #include <sys/vfs.h>
45// #include <mntent.h> 45// #include <mntent.h>
46 46
47 47
48static bool isCF(const QString& m) 48static bool isCF(const QString& m)
49{ 49{
50 50
51#ifndef Q_OS_MACX 51#ifndef Q_OS_MACX
52 FILE* f = fopen("/var/run/stab", "r"); 52 FILE* f = fopen("/var/run/stab", "r");
53 if (!f) f = fopen("/var/state/pcmcia/stab", "r"); 53 if (!f) f = fopen("/var/state/pcmcia/stab", "r");
54 if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); 54 if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
55 if ( f ) 55 if ( f )
56 { 56 {
57 char line[1024]; 57 char line[1024];
58 char devtype[80]; 58 char devtype[80];
59 char devname[80]; 59 char devname[80];
60 while ( fgets( line, 1024, f ) ) 60 while ( fgets( line, 1024, f ) )
61 { 61 {
62 // 0 ide ide-cs 0 hda 3 0 62 // 0 ide ide-cs 0 hda 3 0
63 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) 63 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
64 { 64 {
65 if ( QString(devtype) == "ide" && m.find(devname)>0 ) 65 if ( QString(devtype) == "ide" && m.find(devname)>0 )
66 { 66 {
67 fclose(f); 67 fclose(f);
68 return TRUE; 68 return TRUE;
69 } 69 }
70 } 70 }
71 } 71 }
72 fclose(f); 72 fclose(f);
73 } 73 }
74#endif /* Q_OS_MACX */ 74#endif /* Q_OS_MACX */
75 return FALSE; 75 return FALSE;
76} 76}
77 77
78/*! \class StorageInfo storage.h 78/*! \class StorageInfo storage.h
79 \brief The StorageInfo class describes the disks mounted on the file system. 79 \brief The StorageInfo class describes the disks mounted on the file system.
80 80
81 This class provides access to the mount information for the Linux 81 This class provides access to the mount information for the Linux
82 filesystem. Each mount point is represented by the FileSystem class. 82 filesystem. Each mount point is represented by the FileSystem class.
83 To ensure this class has the most up to date size information, call 83 To ensure this class has the most up to date size information, call
84 the update() method. Note that this will automatically be signaled 84 the update() method. Note that this will automatically be signaled
85 by the operating system when a disk has been mounted or unmounted. 85 by the operating system when a disk has been mounted or unmounted.
86 86
87 \ingroup qtopiaemb 87 \ingroup qtopiaemb
88*/ 88*/
89 89
90/*! Constructor that determines the current mount points of the filesystem. 90/*! Constructor that determines the current mount points of the filesystem.
91 The standard \a parent parameters is passed on to QObject. 91 The standard \a parent parameters is passed on to QObject.
92 */ 92 */
93StorageInfo::StorageInfo( QObject *parent ) 93StorageInfo::StorageInfo( QObject *parent )
94 : QObject( parent ) 94 : QObject( parent )
95{ 95{
96 mFileSystems.setAutoDelete( TRUE ); 96 mFileSystems.setAutoDelete( TRUE );
97 channel = new QCopChannel( "QPE/Card", this ); 97 channel = new QCopChannel( "QPE/Card", this );
98 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), 98 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
99 this, SLOT(cardMessage(const QCString&,const QByteArray&)) ); 99 this, SLOT(cardMessage(const QCString&,const QByteArray&)) );
100 update(); 100 update();
101} 101}
102 102
103/*! Returns the longest matching FileSystem that starts with the 103/*! Returns the longest matching FileSystem that starts with the
104 same prefix as \a filename as its mount point. 104 same prefix as \a filename as its mount point.
105*/ 105*/
106const FileSystem *StorageInfo::fileSystemOf( const QString &filename ) 106const FileSystem *StorageInfo::fileSystemOf( const QString &filename )
107{ 107{
108 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) 108 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
109 { 109 {
110 if ( filename.startsWith( (*i)->path() ) ) 110 if ( filename.startsWith( (*i)->path() ) )
111 return (*i); 111 return (*i);
112 } 112 }
113 return 0; 113 return 0;
114} 114}
115 115
116 116
117void StorageInfo::cardMessage( const QCString& msg, const QByteArray& ) 117void StorageInfo::cardMessage( const QCString& msg, const QByteArray& )
118{ 118{
119 if ( msg == "mtabChanged()" ) 119 if ( msg == "mtabChanged()" )
120 update(); 120 update();
121} 121}
122 122
123 123
124/*! Updates the mount and free space available information for each mount 124/*! Updates the mount and free space available information for each mount
125 point. This method is automatically called when a disk is mounted or 125 point. This method is automatically called when a disk is mounted or
126 unmounted. 126 unmounted.
127*/ 127*/
128// cause of the lack of a d pointer we need 128// cause of the lack of a d pointer we need
129// to store informations in a config file :( 129// to store informations in a config file :(
130void StorageInfo::update() 130void StorageInfo::update()
131{ 131{
132 //qDebug("StorageInfo::updating"); 132 //qDebug("StorageInfo::updating");
133#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 133#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
134 struct mntent *me; 134 struct mntent *me;
135 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 135 FILE *mntfp = setmntent( "/etc/mtab", "r" );
136 136
137 QStringList curdisks; 137 QStringList curdisks;
138 QStringList curopts; 138 QStringList curopts;
139 QStringList curfs; 139 QStringList curfs;
140 bool rebuild = FALSE; 140 bool rebuild = FALSE;
141 int n=0; 141 int n=0;
142 if ( mntfp ) 142 if ( mntfp )
143 { 143 {
144 while ( (me = getmntent( mntfp )) != 0 ) 144 while ( (me = getmntent( mntfp )) != 0 )
145 { 145 {
146 QString fs = me->mnt_fsname; 146 QString fs = me->mnt_fsname;
147 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" 147 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
148 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" 148 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
149 || fs.left( 14 ) == "/dev/mmc/part1" 149 || fs.left( 14 ) == "/dev/mmc/part1"
150 || fs.left(5)=="tmpfs" || fs.left(11)=="/dev/mmcblk" 150 || fs.left(5)=="tmpfs" || fs.left(11)=="/dev/mmcblk"
151 || fs.left(9)=="/dev/root" ) 151 || fs.left(9)=="/dev/root" )
152 { 152 {
153 n++; 153 n++;
154 curdisks.append(fs); 154 curdisks.append(fs);
155 curopts.append( me->mnt_opts ); 155 curopts.append( me->mnt_opts );
156 //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts ); 156 //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts );
157 curfs.append( me->mnt_dir ); 157 curfs.append( me->mnt_dir );
158 bool found = FALSE; 158 bool found = FALSE;
159 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) 159 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
160 { 160 {
161 if ( (*i)->disk() == fs ) 161 if ( (*i)->disk() == fs )
162 { 162 {
163 found = TRUE; 163 found = TRUE;
164 break; 164 break;
165 } 165 }
166 } 166 }
167 if ( !found ) 167 if ( !found )
168 rebuild = TRUE; 168 rebuild = TRUE;
169 } 169 }
170 } 170 }
171 endmntent( mntfp ); 171 endmntent( mntfp );
172 } 172 }
173 if ( rebuild || n != (int)mFileSystems.count() ) 173 if ( rebuild || n != (int)mFileSystems.count() )
174 { 174 {
175 mFileSystems.clear(); 175 mFileSystems.clear();
176 QStringList::ConstIterator it=curdisks.begin(); 176 QStringList::ConstIterator it=curdisks.begin();
177 QStringList::ConstIterator fsit=curfs.begin(); 177 QStringList::ConstIterator fsit=curfs.begin();
178 QStringList::ConstIterator optsIt=curopts.begin(); 178 QStringList::ConstIterator optsIt=curopts.begin();
179 for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) 179 for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt)
180 { 180 {
181 QString opts = *optsIt; 181 QString opts = *optsIt;
182 182
183 QString disk = *it; 183 QString disk = *it;
184 QString humanname; 184 QString humanname;
185 bool removable = FALSE; 185 bool removable = FALSE;
186 if ( isCF(disk) ) 186 if ( isCF(disk) )
187 { 187 {
188 humanname = tr("CF Card"); 188 humanname = tr("CF Card");
189 removable = TRUE; 189 removable = TRUE;
190 } 190 }
191 else if ( disk == "/dev/hda1" ) 191 else if ( disk == "/dev/hda1" )
192 { 192 {
193 humanname = tr("Hard Disk"); 193 humanname = tr("Hard Disk");
194 } 194 }
195 else if ( disk.left(9) == "/dev/mmcd" ) 195 else if ( disk.left(9) == "/dev/mmcd" )
196 { 196 {
197 humanname = tr("SD Card"); 197 humanname = tr("SD Card");
198 removable = TRUE; 198 removable = TRUE;
199 } 199 }
200 else if ( disk.left( 14 ) == "/dev/mmc/part1" || disk.left(11) == "/dev/mmcblk" ) 200 else if ( disk.left( 14 ) == "/dev/mmc/part1" || disk.left(11) == "/dev/mmcblk" )
201 { 201 {
202 humanname = tr("MMC Card"); 202 humanname = tr("MMC Card");
203 removable = TRUE; 203 removable = TRUE;
204 } 204 }
205 else if ( disk.left(7) == "/dev/hd" ) 205 else if ( disk.left(7) == "/dev/hd" )
206 humanname = tr("Hard Disk") + " " + disk; 206 humanname = tr("Hard Disk") + " " + disk;
207 else if ( disk.left(7) == "/dev/sd" ) 207 else if ( disk.left(7) == "/dev/sd" ) {
208 humanname = tr("SCSI Hard Disk") + " " + disk; 208 humanname = tr("SCSI Hard Disk") + " " + disk;
209 else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs 209 removable = TRUE;
210 } else if ( disk.left(14) == "/dev/mtdblock6" ) //openzaurus ramfs
210 humanname = tr("Internal Memory"); 211 humanname = tr("Internal Memory");
211 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" ) 212 else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
212 humanname = tr("Internal Storage"); 213 humanname = tr("Internal Storage");
213 else if ( disk.left(14) == "/dev/mtdblock/" ) 214 else if ( disk.left(14) == "/dev/mtdblock/" )
214 humanname = tr("Internal Storage") + " " + disk; 215 humanname = tr("Internal Storage") + " " + disk;
215 else if ( disk.left(13) == "/dev/mtdblock" ) 216 else if ( disk.left(13) == "/dev/mtdblock" )
216 humanname = tr("Internal Storage") + " " + disk; 217 humanname = tr("Internal Storage") + " " + disk;
217 else if ( disk.left(9) == "/dev/root" ) 218 else if ( disk.left(9) == "/dev/root" )
218 humanname = tr("Internal Storage") + " " + disk; 219 humanname = tr("Internal Storage") + " " + disk;
219 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs 220 else if ( disk.left(5) == "tmpfs" ) //ipaqs /mnt/ramfs
220 humanname = tr("Internal Memory"); 221 humanname = tr("Internal Memory");
221 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts ); 222 FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
222 mFileSystems.append( fs ); 223 mFileSystems.append( fs );
223 } 224 }
224 emit disksChanged(); 225 emit disksChanged();
225 } 226 }
226 else 227 else
227 { 228 {
228 // just update them 229 // just update them
229 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) 230 for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
230 i.current()->update(); 231 i.current()->update();
231 } 232 }
232#endif 233#endif
233} 234}
234 235
235bool deviceTab( const char *device) 236bool deviceTab( const char *device)
236{ 237{
237 QString name = device; 238 QString name = device;
238 bool hasDevice=false; 239 bool hasDevice=false;
239 240
240#ifdef Q_OS_MACX 241#ifdef Q_OS_MACX
241 // Darwin (MacOS X) 242 // Darwin (MacOS X)
242 struct statfs** mntbufp; 243 struct statfs** mntbufp;
243 int count = 0; 244 int count = 0;
244 if ( ( count = getmntinfo( mntbufp, MNT_WAIT ) ) == 0 ) 245 if ( ( count = getmntinfo( mntbufp, MNT_WAIT ) ) == 0 )
245 { 246 {
246 qWarning("deviceTab: Error in getmntinfo(): %s",strerror( errno ) ); 247 qWarning("deviceTab: Error in getmntinfo(): %s",strerror( errno ) );
247 hasDevice = false; 248 hasDevice = false;
248 } 249 }
249 for( int i = 0; i < count; i++ ) 250 for( int i = 0; i < count; i++ )
250 { 251 {
251 QString deviceName = mntbufp[i]->f_mntfromname; 252 QString deviceName = mntbufp[i]->f_mntfromname;
252 qDebug(deviceName); 253 qDebug(deviceName);
253 if( deviceName.left( name.length() ) == name ) 254 if( deviceName.left( name.length() ) == name )
254 hasDevice = true; 255 hasDevice = true;
255 } 256 }
256#else 257#else
257 // Linux 258 // Linux
258 struct mntent *me; 259 struct mntent *me;
259 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 260 FILE *mntfp = setmntent( "/etc/mtab", "r" );
260 if ( mntfp ) 261 if ( mntfp )
261 { 262 {
262 while ( (me = getmntent( mntfp )) != 0 ) 263 while ( (me = getmntent( mntfp )) != 0 )
263 { 264 {
264 QString deviceName = me->mnt_fsname; 265 QString deviceName = me->mnt_fsname;
265 // qDebug(deviceName); 266 // qDebug(deviceName);
266 if( deviceName.left(name.length()) == name) 267 if( deviceName.left(name.length()) == name)
267 { 268 {
268 hasDevice = true; 269 hasDevice = true;
269 } 270 }
270 } 271 }
271 } 272 }
272 endmntent( mntfp ); 273 endmntent( mntfp );
273#endif /* Q_OS_MACX */ 274#endif /* Q_OS_MACX */
274 275
275 276
276 return hasDevice; 277 return hasDevice;
277} 278}
278 279
279/*! 280/*!
280 * @fn static bool StorageInfo::hasCf() 281 * @fn static bool StorageInfo::hasCf()
281 * @brief returns whether device has Cf mounted 282 * @brief returns whether device has Cf mounted
282 * 283 *
283 */ 284 */
284bool StorageInfo::hasCf() 285bool StorageInfo::hasCf()
285{ 286{
286 return deviceTab("/dev/hd"); 287 return deviceTab("/dev/hd");
287} 288}
288 289
289/*! 290/*!
290 * @fn static bool StorageInfo::hasSd() 291 * @fn static bool StorageInfo::hasSd()
291 * @brief returns whether device has SD mounted 292 * @brief returns whether device has SD mounted
292 * 293 *
293 */ 294 */
294bool StorageInfo::hasSd() 295bool StorageInfo::hasSd()
295{ 296{
296 return deviceTab("/dev/mmcd"); 297 return deviceTab("/dev/mmcd");
297} 298}
298 299
299/*! 300/*!
300 * @fn static bool StorageInfo::hasMmc() 301 * @fn static bool StorageInfo::hasMmc()
301 * @brief returns whether device has mmc mounted 302 * @brief returns whether device has mmc mounted
302 * 303 *
303 */ 304 */
304bool StorageInfo::hasMmc() 305bool StorageInfo::hasMmc()
305{ 306{
306 bool hasMmc=false; 307 bool hasMmc=false;
307 if( deviceTab("/dev/mmc/part")) 308 if( deviceTab("/dev/mmc/part"))
308 hasMmc=true; 309 hasMmc=true;
309 if( deviceTab("/dev/mmcd")) 310 if( deviceTab("/dev/mmcd"))
310 hasMmc=true; 311 hasMmc=true;
311 return hasMmc; 312 return hasMmc;
312} 313}
313 314
314/*! \fn const QList<FileSystem> &StorageInfo::fileSystems() const 315/*! \fn const QList<FileSystem> &StorageInfo::fileSystems() const
315 Returns a list of all available mounted file systems. 316 Returns a list of all available mounted file systems.
316 317
317 \warning This may change in Qtopia 3.x to return only relevant Qtopia file systems (and ignore mount points such as /tmp) 318 \warning This may change in Qtopia 3.x to return only relevant Qtopia file systems (and ignore mount points such as /tmp)
318*/ 319*/
319 320
320/*! \fn void StorageInfo::disksChanged() 321/*! \fn void StorageInfo::disksChanged()
321 Gets emitted when a disk has been mounted or unmounted, such as when 322 Gets emitted when a disk has been mounted or unmounted, such as when
322 a CF c 323 a CF c
323*/ 324*/
324//--------------------------------------------------------------------------- 325//---------------------------------------------------------------------------
325 326
326FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o ) 327FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o )
327 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o ) 328 : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
328{ 329{
329 update(); 330 update();
330} 331}
331 332
332void FileSystem::update() 333void FileSystem::update()
333{ 334{
334#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 335#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
335 struct statfs fs; 336 struct statfs fs;
336 if ( !statfs( fspath.latin1(), &fs ) ) 337 if ( !statfs( fspath.latin1(), &fs ) )
337 { 338 {
338 blkSize = fs.f_bsize; 339 blkSize = fs.f_bsize;
339 totalBlks = fs.f_blocks; 340 totalBlks = fs.f_blocks;
340 availBlks = fs.f_bavail; 341 availBlks = fs.f_bavail;
341 } 342 }
342 else 343 else
343 { 344 {
344 blkSize = 0; 345 blkSize = 0;
345 totalBlks = 0; 346 totalBlks = 0;
346 availBlks = 0; 347 availBlks = 0;
347 } 348 }
348#endif 349#endif
349} 350}
350 351
351/*! \class FileSystem storage.h 352/*! \class FileSystem storage.h
352 \brief The FileSystem class describes a single mount point. 353 \brief The FileSystem class describes a single mount point.
353 354
354 This class simply returns information about a mount point, including 355 This class simply returns information about a mount point, including
355 file system name, mount point, human readable name, size information 356 file system name, mount point, human readable name, size information
356 and mount options information. 357 and mount options information.
357 \ingroup qtopiaemb 358 \ingroup qtopiaemb
358 359
359 \sa StorageInfo 360 \sa StorageInfo
360*/ 361*/
361 362
362/*! \fn const QString &FileSystem::disk() const 363/*! \fn const QString &FileSystem::disk() const
363 Returns the file system name, such as /dev/hda3 364 Returns the file system name, such as /dev/hda3
364*/ 365*/
365 366
366/*! \fn const QString &FileSystem::path() const 367/*! \fn const QString &FileSystem::path() const
367 Returns the mount path, such as /home 368 Returns the mount path, such as /home
368*/ 369*/
369 370
370/*! \fn const QString &FileSystem::name() const 371/*! \fn const QString &FileSystem::name() const
371 Returns the translated, human readable name for the mount directory. 372 Returns the translated, human readable name for the mount directory.
372*/ 373*/
373 374
374/*! \fn const QString &FileSystem::options() const 375/*! \fn const QString &FileSystem::options() const
375 Returns the mount options 376 Returns the mount options
376*/ 377*/
377 378
378/*! \fn long FileSystem::blockSize() const 379/*! \fn long FileSystem::blockSize() const
379 Returns the size of each block on the file system. 380 Returns the size of each block on the file system.
380*/ 381*/
381 382
382/*! \fn long FileSystem::totalBlocks() const 383/*! \fn long FileSystem::totalBlocks() const
383 Returns the total number of blocks on the file system 384 Returns the total number of blocks on the file system
384*/ 385*/
385 386
386/*! \fn long FileSystem::availBlocks() const 387/*! \fn long FileSystem::availBlocks() const
387 Returns the number of available blocks on the file system 388 Returns the number of available blocks on the file system
388 */ 389 */
389 390
390/*! \fn bool FileSystem::isRemovable() const 391/*! \fn bool FileSystem::isRemovable() const
391 Returns flag whether the file system can be removed, such as a CF card 392 Returns flag whether the file system can be removed, such as a CF card
392 would be removable, but the internal memory wouldn't 393 would be removable, but the internal memory wouldn't
393*/ 394*/
394 395
395/*! \fn bool FileSystem::isWritable() const 396/*! \fn bool FileSystem::isWritable() const
396 Returns flag whether the file system is mounted as writable or read-only. 397 Returns flag whether the file system is mounted as writable or read-only.
397 Returns FALSE if read-only, TRUE if read and write. 398 Returns FALSE if read-only, TRUE if read and write.
398*/ 399*/
399 400
400/*! \fn QStringList StorageInfo::fileSystemNames() const 401/*! \fn QStringList StorageInfo::fileSystemNames() const
401 Returns a list of filesystem names. 402 Returns a list of filesystem names.