diff options
Diffstat (limited to 'ksysguard/ksysguardd/conf.c')
-rw-r--r-- | ksysguard/ksysguardd/conf.c | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/ksysguard/ksysguardd/conf.c b/ksysguard/ksysguardd/conf.c new file mode 100644 index 000000000..1d857137b --- /dev/null +++ b/ksysguard/ksysguardd/conf.c @@ -0,0 +1,137 @@ +/* + KSysGuard, the KDE System Guard + + Copyright (c) 2001 Tobias Koenig <[email protected]> + + 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; +} |