Source Code (Use browser search to find items of interest.)
Class Index
ksysctrl'DriveInfo (./kdeadmin/ksysctrl/ksysctrl/driveinfo.h:30)
class DriveInfo
{
public:
enum drivetype { DriveNone,
DriveCDROM,
DriveHD };
DriveInfo(const QString& deviceid, drivetype);
~DriveInfo() {}
ulong blocks() const { return _blocks; }
int count() const { return _partlist.count(); }
QString device() const { return QString("/dev/")+_deviceid; }
PartitionInfo *firstPartition() { return _partlist.first(); }
PartitionInfo *nextPartition() { return _partlist.next(); }
private:
QString readSizes(const QString& partid, ulong *total, ulong *used, ulong *avail);
QString _deviceid;
QList<PartitionInfo> _partlist;
ushort _major, _minor;
ulong _blocks;
};
ksysctrl'DriveInfo::DriveInfo() (./kdeadmin/ksysctrl/ksysctrl/driveinfo.cpp:27)
DriveInfo::DriveInfo(const QString& deviceid, drivetype drvtype) : _deviceid(deviceid)
{
QFile procpart("/proc/partitions");
ushort major, minor;
ulong blocks, total, used, avail;
QString devid, line, mountpoint;
char dev[8];
_partlist.setAutoDelete(true);
_partlist.clear();
if (drvtype == DriveCDROM)
{
mountpoint = readSizes(deviceid, &total, &used, &avail);
_blocks = total;
return;
}
if (procpart.exists())
{
if (procpart.open(IO_ReadOnly))
{
QTextStream s(&procpart);
s.readLine(); // Drop header
s.readLine();
while (!s.eof())
{
if ((line = s.readLine()).isEmpty()) break;
sscanf(line.data(), "%u %u %lu %s", &major, &minor, &blocks, dev);
devid = dev;
if (devid == deviceid)
{
_major = major;
_minor = minor;
_blocks = blocks;
while (!s.eof())
{
if ((line = s.readLine()).isEmpty()) break;
sscanf(line.data(), "%u %u %lu %s", &major, &minor, &blocks, dev);
devid = dev;
if (devid.left(3) != deviceid) break;
if (minor & 0x3f)
{
mountpoint = readSizes(devid, &total, &used, &avail);
_partlist.append(new PartitionInfo(devid, major, minor, mountpoint, blocks, total, used, avail));
}
}
break;
}
}
procpart.close();
}
}
}
ksysctrl'DriveInfo::readSizes() (./kdeadmin/ksysctrl/ksysctrl/driveinfo.cpp:94)
QString DriveInfo::readSizes(const QString& partid, ulong *sizetotal, ulong *sizeused, ulong *sizeavail)
{
FILE *fhd;
char mountp[64] = "";
QString line;
*sizetotal = *sizeused = *sizeavail = 0;
if ((fhd = popen("df", "r")))
{
QTextStream s(fhd, IO_ReadOnly);
s.readLine(); // Drop header
while (!s.eof())
{
if ((line = s.readLine()).isEmpty()) break;
if (line.mid(5, partid.length()) == partid)
{
sscanf(line.data(), "%*s %lu %lu %lu %*s %s", sizetotal, sizeused, sizeavail, mountp);
break;
}
}
pclose(fhd);
}
return mountp;
}