You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/ksysguard/ksysguardd/conf.c

138 lines
3.7 KiB

/*
KSysGuard, the KDE System Guard
Copyright (c) 2001 Tobias Koenig <tokoe@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of version 2 of the GNU General Public
License as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Command.h"
#include "conf.h"
CONTAINER LogFileList = 0;
CONTAINER SensorList = 0;
char* RegisterDomain = 0;
void LogFileList_cleanup( void *ptr );
void freeConfigFile( void );
void LogFileList_cleanup( void *ptr )
{
if ( ptr ) {
if ( ((ConfigLogFile*)ptr)->name )
free( ((ConfigLogFile*)ptr)->name );
free( ptr );
}
}
void freeConfigFile( void )
{
destr_ctnr( LogFileList, LogFileList_cleanup );
destr_ctnr( SensorList, free );
}
void parseConfigFile( const char *filename )
{
FILE* config;
char line[ 2048 ];
char *begin, *token, *tmp;
ConfigLogFile *confLog;
LogFileList = new_ctnr();
SensorList = new_ctnr();
if ( ( config = fopen( filename, "r" ) ) == NULL ) {
log_error( "can't open config file '%s'", filename );
/**
If we can't open a config file we have to add the
available sensors manually
*/
push_ctnr( SensorList, strdup( "ProcessList" ) );
push_ctnr( SensorList, strdup( "Memory" ) );
push_ctnr( SensorList, strdup( "Stat" ) );
push_ctnr( SensorList, strdup( "NetDev" ) );
push_ctnr( SensorList, strdup( "NetStat" ) );
push_ctnr( SensorList, strdup( "Apm" ) );
push_ctnr( SensorList, strdup( "Acpi" ) );
push_ctnr( SensorList, strdup( "CpuInfo" ) );
push_ctnr( SensorList, strdup( "LoadAvg" ) );
push_ctnr( SensorList, strdup( "LmSensors" ) );
push_ctnr( SensorList, strdup( "DiskStat" ) );
push_ctnr( SensorList, strdup( "LogFile" ) );
push_ctnr( SensorList, strdup( "DellLaptop" ) );
return;
}
while ( fgets( line, sizeof( line ), config ) != NULL ) {
if ( ( line[ 0 ] == '#') || ( strlen( line ) == 0 ) )
continue;
if ( strchr( line, '#' ) )
*( strchr( line, '#' ) ) = '\0';
if ( line[ strlen( line ) - 1 ] == '\n' )
line[ strlen( line ) - 1 ] = '\0';
if ( !strncmp( line, "RegisterDomain",14) && (begin = strchr( line, '=' )) ) RegisterDomain=strdup(begin+1);
if ( !strncmp( line, "LogFiles", 8 ) && (begin = strchr( line, '=' )) ) {
begin++;
for ( token = strtok( begin, "," ); token; token = strtok( NULL, "," ) ) {
if ( ( confLog = (ConfigLogFile *)malloc( sizeof( ConfigLogFile ) ) ) == NULL ) {
log_error( "malloc() no free memory avail" );
continue;
}
confLog->name = strdup( token );
tmp = strchr( confLog->name, ':' );
*tmp = '\0';
confLog->path = tmp;
confLog->path++;
push_ctnr( LogFileList, confLog );
}
}
if ( !strncmp( line, "Sensors", 7 ) && (begin = strchr( line, '=' )) ) {
begin++;
for ( token = strtok( begin, ","); token; token = strtok( NULL, "," ) )
push_ctnr( SensorList, strdup( token ) );
}
}
fclose( config );
}
int sensorAvailable( const char *sensor )
{
char* name;
for ( name = first_ctnr( SensorList ); name; name = next_ctnr( SensorList ) ) {
if ( !strcmp( name, sensor ) )
return 1;
}
return 0;
}