diff options
Diffstat (limited to 'installerbuilder/libinstaller/kdtools/KDToolsCore/kdsysinfo_x11.cpp')
-rw-r--r-- | installerbuilder/libinstaller/kdtools/KDToolsCore/kdsysinfo_x11.cpp | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/installerbuilder/libinstaller/kdtools/KDToolsCore/kdsysinfo_x11.cpp b/installerbuilder/libinstaller/kdtools/KDToolsCore/kdsysinfo_x11.cpp new file mode 100644 index 000000000..a9d609d4d --- /dev/null +++ b/installerbuilder/libinstaller/kdtools/KDToolsCore/kdsysinfo_x11.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. All rights reserved. +** +** This file is part of the KD Tools library. +** +** Licensees holding valid commercial KD Tools licenses may use this file in +** accordance with the KD Tools Commercial License Agreement provided with +** the Software. +** +** +** This file may be distributed and/or modified under the terms of the +** GNU Lesser General Public License version 2 and version 3 as published by the +** Free Software Foundation and appearing in the file LICENSE.LGPL included. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** Contact info@kdab.com if any conditions of this licensing are not +** clear to you. +** +**********************************************************************/ + +#include "kdsysinfo.h" + +#include "kdbytesize.h" +#include "kdversion.h" + +#include <sys/utsname.h> +#include <sys/statvfs.h> + +#include <QtCore/QFile> +#include <QtCore/QTextStream> +#include <QtCore/QDir> +#include <QtCore/QFileInfo> + +KDSysInfo::OperatingSystemType KDSysInfo::osType() +{ +#if defined( Q_OS_LINUX ) + return Linux; +#else + UnknownOperatingSystem; +#endif +} + +KDVersion KDSysInfo::osVersion() +{ +#if defined( Q_OS_LINUX ) + struct utsname info; + uname( &info ); + QString v = QString::fromLatin1( info.release ); + if( v.contains( QString::fromLatin1( "-" ) ) ) + v = v.mid( 0, v.indexOf( QString::fromLatin1( "-" ) ) ); + + return KDVersion::fromString( v ); +#else + return KDVersion(); +#endif +} + +QString KDSysInfo::osDescription() +{ +#if defined( Q_OS_LINUX ) + return QObject::tr( "Linux %1" ).arg( osVersion().toString() ); +#else + return QString(); +#endif +} + +KDByteSize KDSysInfo::installedMemory() +{ +#ifdef Q_OS_LINUX + QFile f( QLatin1String( "/proc/meminfo" ) ); + f.open( QIODevice::ReadOnly ); + QTextStream stream( &f ); + while( true ) + { + const QString s = stream.readLine(); + if( !s.startsWith( QLatin1String( "MemTotal:" ) ) ) + continue; + else if( s.isEmpty() ) + return KDByteSize(); + + const QStringList parts = s.split( QLatin1Char( ' ' ), QString::SkipEmptyParts ); + return KDByteSize( parts.at(1).toInt() * 1024LL ); + } +#else + quint64 physmem; + size_t len = sizeof physmem; + static int mib[2] = { CTL_HW, HW_MEMSIZE }; + sysctl( mib, 2, &physmem, &len, 0, 0 ); + return KDByteSize( physmem ); +#endif + return KDByteSize(); +} + +KDSysInfo::ArchitectureType KDSysInfo::architecture() +{ + return UnknownArchitecture; +} + +QList< KDSysInfo::Volume > KDSysInfo::mountedVolumes() +{ + QList< Volume > result; + + QFile f( QLatin1String( "/etc/mtab" ) ); + if ( !f.open( QIODevice::ReadOnly ) ) { + qCritical( "%s: Could not open %s: %s", Q_FUNC_INFO, qPrintable(f.fileName()), qPrintable(f.errorString()) ); + return QList<KDSysInfo::Volume>(); //better error-handling? + } + + QTextStream stream( &f ); + while( true ) + { + const QString s = stream.readLine(); + if ( s.isNull() ) + return result; + + if( !s.startsWith( QLatin1Char( '/' ) ) ) + continue; + + const QStringList parts = s.split( QLatin1Char( ' ' ), QString::SkipEmptyParts ); + + Volume v; + v.setName( parts.at( 1 ) ); + v.setPath( parts.at( 1 ) ); + + struct statvfs data; + if( statvfs( qPrintable( v.name() ), &data ) == 0 ) + { + v.setSize( KDByteSize( static_cast< quint64 >( data.f_blocks ) * data.f_bsize ) ); + v.setAvailableSpace( KDByteSize( static_cast< quint64> ( data.f_bfree ) * data.f_bsize ) ); + } + + result.push_back( v ); + } + + return result; +} + +QList< KDSysInfo::ProcessInfo > KDSysInfo::runningProcesses() +{ + QList< KDSysInfo::ProcessInfo > processes; + QDir procDir( QLatin1String( "/proc" ) ); + const QFileInfoList procCont = procDir.entryInfoList( QDir::Dirs | QDir::NoDotAndDotDot | QDir::Readable ); + QRegExp validator( QLatin1String( "[0-9]+" ) ); + Q_FOREACH( const QFileInfo& info, procCont ) + { + if ( validator.exactMatch( info.fileName() ) ) + { + const QString linkPath = QDir( info.absoluteFilePath() ).absoluteFilePath( QLatin1String( "exe" ) ); + const QFileInfo linkInfo( linkPath ); + if ( linkInfo.exists() ) + { + KDSysInfo::ProcessInfo processInfo; + processInfo.name = linkInfo.symLinkTarget(); + processInfo.id = info.fileName().toInt(); + processes.append( processInfo ); + } + } + } + return processes; +} + |