[PATCH 4/4] libsensors: Read extra configuration files from /etc/sensors.d

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

---
 lib/init.c         |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 lib/sensors.conf.5 |   19 ++++++++++++++++--
 2 files changed, 70 insertions(+), 3 deletions(-)

--- lm-sensors.orig/lib/init.c	2009-02-04 17:52:51.000000000 +0100
+++ lm-sensors/lib/init.c	2009-02-04 17:52:51.000000000 +0100
@@ -1,7 +1,7 @@
 /*
     init.c - Part of libsensors, a Linux library for reading sensor data.
     Copyright (c) 1998, 1999  Frodo Looijaard <frodol at dds.nl>
-    Copyright (C) 2007        Jean Delvare <khali at linux-fr.org>
+    Copyright (C) 2007, 2009  Jean Delvare <khali at 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. */
@@ -100,6 +106,47 @@ 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_type == DT_FIFO;
+}
+
+static int add_config_from_dir(const char *dir)
+{
+	int i, count, res;
+	struct dirent **namelist;
+
+	count = scandir(dir, &namelist, config_file_filter, alphasort);
+	if (count < 0) {
+		if (errno == ENOMEM)
+			sensors_fatal_error(__func__, "Out of memory");
+		return 0;
+	}
+
+	for (res = 0, i = 0; !res && i < count; i++) {
+		int len;
+		char path[NAME_MAX];
+		FILE *input;
+
+		len = snprintf(path, NAME_MAX, "%s/%s", dir,
+			       namelist[i]->d_name);
+		if (len >= NAME_MAX)
+			sensors_fatal_error(__func__, "File name too long");
+
+		input = fopen(path, "r");
+		if (input) {
+			res = parse_config(input);
+			fclose(input);
+		}
+		free(namelist[i]);
+	}
+	free(namelist);
+
+	return res;
+}
+
 int sensors_init(FILE *input)
 {
 	int res;
@@ -125,6 +172,11 @@ int sensors_init(FILE *input)
 			if (res)
 				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;
--- lm-sensors.orig/lib/sensors.conf.5	2008-12-07 16:26:24.000000000 +0100
+++ lm-sensors/lib/sensors.conf.5	2009-02-04 18:34:56.000000000 +0100
@@ -1,6 +1,6 @@
 .\" Copyright (C) 1998, 1999 Adrian Baugh <adrian.baugh at keble.ox.ac.uk> and
 .\"                          Frodo Looijaard <frodol at dds.nl>
-.\" Copyright (C) 2008       Jean Delvare <khali at linux-fr.org>
+.\" Copyright (C) 2008, 2009 Jean Delvare <khali at 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,14 @@ 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 main
+configuration file.
+.RE
 
 .SH SEE ALSO
 libsensors(3)

-- 
Jean Delvare



[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux