Read extra configuration files from /etc/sensors.d.

git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5647 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare committed 2009-02-15 17:22:38 +00:00
1 parent 3ea4545611
commit e4ee28d5c8
4 files changed
+91 -6

No files matched your search

+1
View File
@@ -12,6 +12,7 @@ SVN-HEAD
Report configuration file read errors
Exit the configuration file parser sooner
Free bus statements from the configuration file sooner
Read extra configuration files from /etc/sensors.d
lm_sensors.init: Support new format of /etc/sysconfig/lm_sensors (#2246)
Drop support for kernels 2.4 and earlier
lm_sensors.init.suse: Delete (actual SuSE script is much different)
+59 -1
View File
@@ -1,7 +1,7 @@
/*
init.c - Part of libsensors, a Linux library for reading sensor data.
Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl>
Copyright (C) 2007 Jean Delvare <khali@linux-fr.org>
Copyright (C) 2007, 2009 Jean Delvare <khali@linux-fr.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,11 +19,16 @@
MA 02110-1301 USA.
*/
/* Needed for scandir() and alphasort() */
#define _BSD_SOURCE
#include <sys/types.h>
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
#include "sensors.h"
#include "data.h"
#include "error.h"
@@ -35,6 +40,7 @@
#define DEFAULT_CONFIG_FILE ETCDIR "/sensors3.conf"
#define ALT_CONFIG_FILE ETCDIR "/sensors.conf"
#define DEFAULT_CONFIG_DIR ETCDIR "/sensors.d"
/* Wrapper around sensors_yyparse(), which clears the locale so that
the decimal numbers are always parsed properly. */
@@ -99,6 +105,53 @@ exit_cleanup:
return err;
}
static int config_file_filter(const struct dirent *entry)
{
return (entry->d_type == DT_REG || entry->d_type == DT_LNK)
&& entry->d_name[0] != '.'; /* Skip hidden files */
}
static int add_config_from_dir(const char *dir)
{
int count, res, i;
struct dirent **namelist;
count = scandir(dir, &namelist, config_file_filter, alphasort);
if (count < 0) {
sensors_parse_error(strerror(errno), 0);
return -SENSORS_ERR_PARSE;
}
for (res = 0, i = 0; !res && i < count; i++) {
int len;
char path[PATH_MAX];
FILE *input;
len = snprintf(path, sizeof(path), "%s/%s", dir,
namelist[i]->d_name);
if (len < 0 || len >= (int)sizeof(path)) {
res = -SENSORS_ERR_PARSE;
continue;
}
input = fopen(path, "r");
if (input) {
res = parse_config(input);
fclose(input);
} else {
res = -SENSORS_ERR_PARSE;
sensors_parse_error(strerror(errno), 0);
}
}
/* Free memory allocated by scandir() */
for (i = 0; i < count; i++)
free(namelist[i]);
free(namelist);
return res;
}
int sensors_init(FILE *input)
{
int res;
@@ -129,6 +182,11 @@ int sensors_init(FILE *input)
res = -SENSORS_ERR_PARSE;
goto exit_cleanup;
}
/* Also check for files in default directory */
res = add_config_from_dir(DEFAULT_CONFIG_DIR);
if (res)
goto exit_cleanup;
}
return 0;
+13 -3
View File
@@ -1,4 +1,5 @@
.\" Copyright 1998, 1999 Adrian Baugh <adrian.baugh@keble.ox.ac.uk>
.\" Copyright (C) 1998, 1999 Adrian Baugh <adrian.baugh@keble.ox.ac.uk>
.\" Copyright (C) 2007, 2009 Jean Delvare <khali@linux-fr.org>
.\" based on sensors.h, part of libsensors by Frodo Looijaard
.\" libsensors is distributed under the GPL
.\"
@@ -24,7 +25,7 @@
.\"
.\" References consulted:
.\" libsensors source code
.TH libsensors 3 "October 2007" "lm-sensors 3" "Linux Programmer's Manual"
.TH libsensors 3 "February 2009" "lm-sensors 3" "Linux Programmer's Manual"
.SH NAME
libsensors \- publicly accessible functions provided by the sensors library
.SH SYNOPSIS
@@ -57,7 +58,7 @@ value unequal to zero, you are in trouble; you can not assume anything will
be initialized properly. If you want to reload the configuration file, call
sensors_cleanup() below before calling sensors_init() again.
If FILE is NULL, the default configuration file is used (see the FILES
If FILE is NULL, the default configuration files are used (see the FILES
section below). Most applications will want to do that.
.B void sensors_cleanup(void);
@@ -180,6 +181,15 @@ The system-wide
.BR libsensors (3)
configuration file. /etc/sensors3.conf is tried first, and if it doesn't exist,
/etc/sensors.conf is used instead.
.RE
.I /etc/sensors.d
.RS
A directory where you can put additional libsensors configuration files.
Files found in this directory will be processed in alphabetical order after
the default configuration file. Files with names that start with a dot are
ignored.
.RE
.SH SEE ALSO
sensors.conf(5)
+18 -2
View File
@@ -1,6 +1,6 @@
.\" Copyright (C) 1998, 1999 Adrian Baugh <adrian.baugh@keble.ox.ac.uk> and
.\" Frodo Looijaard <frodol@dds.nl>
.\" Copyright (C) 2008 Jean Delvare <khali@linux-fr.org>
.\" Copyright (C) 2008, 2009 Jean Delvare <khali@linux-fr.org>
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
@@ -21,7 +21,7 @@
.\"
.\" References consulted:
.\" sensors.conf.eg by Frodo Looijaard
.TH sensors.conf 5 "December 2008" "lm-sensors 3" "Linux User's Manual"
.TH sensors.conf 5 "February 2009" "lm-sensors 3" "Linux User's Manual"
.SH NAME
sensors.conf \- libsensors configuration file
@@ -274,6 +274,13 @@ Running
.B sensors --bus-list
will generate these lines for you.
In the case where multiple configuration files are used, the scope
of each
.I bus
statement is the configuration file it was defined in. This makes it
possible to have bus statements in all configuration files which will
not unexpectedly interfere with each other.
.SS STATEMENT ORDER
Statements can go in any order, however it is recommended to put
@@ -533,6 +540,15 @@ The system-wide
.BR libsensors (3)
configuration file. /etc/sensors3.conf is tried first, and if it doesn't exist,
/etc/sensors.conf is used instead.
.RE
.I /etc/sensors.d
.RS
A directory where you can put additional libsensors configuration files.
Files found in this directory will be processed in alphabetical order after
the default configuration file. Files with names that start with a dot are
ignored.
.RE
.SH SEE ALSO
libsensors(3)