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;
}