* [lm-sensors] [PATCH 4/6] Read extra configuration files from
@ 2009-02-11 16:50 Jean Delvare
2009-02-13 5:23 ` Matt Roberds
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Jean Delvare @ 2009-02-11 16:50 UTC (permalink / raw)
To: lm-sensors
Read extra configuration files from /etc/sensors.d.
---
lib/init.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++-
lib/libsensors.3 | 16 +++++++++++--
lib/sensors.conf.5 | 20 +++++++++++++++--
3 files changed, 90 insertions(+), 6 deletions(-)
--- lm-sensors.orig/lib/init.c 2009-02-10 22:01:52.000000000 +0100
+++ lm-sensors/lib/init.c 2009-02-11 10:42:07.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@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[16 + NAME_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;
--- lm-sensors.orig/lib/sensors.conf.5 2009-02-10 21:59:54.000000000 +0100
+++ lm-sensors/lib/sensors.conf.5 2009-02-11 10:30:22.000000000 +0100
@@ -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 those name starts with a dot are
+ignored.
+.RE
.SH SEE ALSO
libsensors(3)
--- lm-sensors.orig/lib/libsensors.3 2009-02-10 21:59:54.000000000 +0100
+++ lm-sensors/lib/libsensors.3 2009-02-11 10:29:09.000000000 +0100
@@ -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 troubl
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 those name starts with a dot are
+ignored.
+.RE
.SH SEE ALSO
sensors.conf(5)
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [lm-sensors] [PATCH 4/6] Read extra configuration files from
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
@ 2009-02-13 5:23 ` Matt Roberds
2009-02-13 11:47 ` Jean Delvare
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Matt Roberds @ 2009-02-13 5:23 UTC (permalink / raw)
To: lm-sensors
On Wed, 11 Feb 2009, Jean Delvare wrote:
> Read extra configuration files from /etc/sensors.d.
[...]
> +static int add_config_from_dir(const char *dir)
[...]
> + for (res = 0, i = 0; !res && i < count; i++) {
> + int len;
> + char path[16 + NAME_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;
> + }
This says that the maximum length of the path to the config files is 16
characters? Seems kind of short. By default this will be
"/etc/sensors.d/" which clocks in at 15 bytes. If somebody wants to use
(say) "/usr/local/etc/sensors.d/" they'll be out of luck. Maybe
something like
char path[PATH_MAX + NAME_MAX];
would be better?
> +++ lm-sensors/lib/sensors.conf.5 2009-02-11 10:30:22.000000000 +0100
[...]
> +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 those name starts with a dot are
^
Spelling: "Files whose name starts"
> +++ lm-sensors/lib/libsensors.3 2009-02-11 10:29:09.000000000 +0100
[...]
> +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 those name starts with a dot are
^
Spelling: "Files whose name starts"
Matt Roberds
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [lm-sensors] [PATCH 4/6] Read extra configuration files from
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
2009-02-13 5:23 ` Matt Roberds
@ 2009-02-13 11:47 ` Jean Delvare
2009-02-13 11:56 ` Charles
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jean Delvare @ 2009-02-13 11:47 UTC (permalink / raw)
To: lm-sensors
Hi Matt,
On Thu, 12 Feb 2009 23:23:12 -0600 (CST), Matt Roberds wrote:
> On Wed, 11 Feb 2009, Jean Delvare wrote:
> > Read extra configuration files from /etc/sensors.d.
>
> [...]
> > +static int add_config_from_dir(const char *dir)
> [...]
> > + for (res = 0, i = 0; !res && i < count; i++) {
> > + int len;
> > + char path[16 + NAME_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;
> > + }
>
> This says that the maximum length of the path to the config files is 16
> characters? Seems kind of short. By default this will be
> "/etc/sensors.d/" which clocks in at 15 bytes. If somebody wants to use
> (say) "/usr/local/etc/sensors.d/" they'll be out of luck.
Not really. There is no strong delimiter between the directory name and
the configuration file name, what is limited is the total length. If
the directory name is longer than 16 bytes then the configuration file
name has to be a bit shorter than NAME_MAX. I very much doubt this will
be a problem in practice. In your example above,
"/usr/local/etc/sensors.d/" is 25 bytes long, so there is still
NAME_MAX-10 (245) bytes available for the configuration file name. I
suspect this is way more than anyone will ever use. Even including the
full board manufacturer and model names in the configuration file name
is hardly going to exceed 50 characters.
So, I very much doubt it is a problem in practice. In fact I had even
started with just char path[NAME_MAX]. I added 16 later just for the
principle, even though I admit I shouldn't have hard-coded it.
> Maybe something like
>
> char path[PATH_MAX + NAME_MAX];
>
> would be better?
I don't know the exact semantics of PATH_MAX but I suspect it includes
all the directory names _and_ the file name, so adding MAX_NAME to it
doesn't make sense. But just char path[PATH_MAX] would probably be the
easiest and cleanest way. I'll do that.
> > +++ lm-sensors/lib/sensors.conf.5 2009-02-11 10:30:22.000000000 +0100
> [...]
> > +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 those name starts with a dot are
> ^
> Spelling: "Files whose name starts"
>
> > +++ lm-sensors/lib/libsensors.3 2009-02-11 10:29:09.000000000 +0100
> [...]
> > +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 those name starts with a dot are
> ^
> Spelling: "Files whose name starts"
Ah, thanks for pointing it out. This one appears to be my preferred
spelling mistakes, I do it all the time :/
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [lm-sensors] [PATCH 4/6] Read extra configuration files from
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
2009-02-13 5:23 ` Matt Roberds
2009-02-13 11:47 ` Jean Delvare
@ 2009-02-13 11:56 ` Charles
2009-02-13 17:41 ` Jean Delvare
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Charles @ 2009-02-13 11:56 UTC (permalink / raw)
To: lm-sensors
Hello :-)
>> +the default configuration file. Files those name starts with a dot are
^
> Spelling: "Files whose name starts"
Better "Files with names that start"?
"Whose" is the possessive form of "who"; historically it was used only when
the possessor was animate. This usage is loosening to accommodate inanimate
possessors (including *n*x files!) but is still controversial. "Files with
names that start" is uncontroversial and, IMHO, more elegant and natural
than "Files whose name starts".
Best
Charles
====================================
Date: Thu, 12 Feb 2009 23:23:12 -0600 (CST)
From: Matt Roberds <mattroberds@cox.net>
Subject: Re: [lm-sensors] [PATCH 4/6] Read extra configuration files
from /etc/sensors.d
To: Jean Delvare <khali@linux-fr.org>
Cc: LM Sensors <lm-sensors@lm-sensors.org>
Message-ID: <Pine.LNX.4.64.0902122322560.32383@birdbird.example.com>
Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed
On Wed, 11 Feb 2009, Jean Delvare wrote:
> Read extra configuration files from /etc/sensors.d.
[...]
> +static int add_config_from_dir(const char *dir)
[...]
> + for (res = 0, i = 0; !res && i < count; i++) {
> + int len;
> + char path[16 + NAME_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;
> + }
This says that the maximum length of the path to the config files is 16
characters? Seems kind of short. By default this will be
"/etc/sensors.d/" which clocks in at 15 bytes. If somebody wants to use
(say) "/usr/local/etc/sensors.d/" they'll be out of luck. Maybe
something like
char path[PATH_MAX + NAME_MAX];
would be better?
> +++ lm-sensors/lib/sensors.conf.5 2009-02-11 10:30:22.000000000 +0100
[...]
> +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 those name starts with a dot are
^
Spelling: "Files whose name starts"
> +++ lm-sensors/lib/libsensors.3 2009-02-11 10:29:09.000000000 +0100
[...]
> +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 those name starts with a dot are
^
Spelling: "Files whose name starts"
Matt Roberds
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [lm-sensors] [PATCH 4/6] Read extra configuration files from
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
` (2 preceding siblings ...)
2009-02-13 11:56 ` Charles
@ 2009-02-13 17:41 ` Jean Delvare
2009-02-14 4:44 ` Matt Roberds
2009-02-14 8:38 ` Jean Delvare
5 siblings, 0 replies; 7+ messages in thread
From: Jean Delvare @ 2009-02-13 17:41 UTC (permalink / raw)
To: lm-sensors
On Fri, 13 Feb 2009 17:19:36 +0530, Charles wrote:
> Hello :-)
>
> >> +the default configuration file. Files those name starts with a dot are
> ^
> > Spelling: "Files whose name starts"
>
> Better "Files with names that start"?
>
> "Whose" is the possessive form of "who"; historically it was used only when
> the possessor was animate. This usage is loosening to accommodate inanimate
> possessors (including *n*x files!) but is still controversial. "Files with
> names that start" is uncontroversial and, IMHO, more elegant and natural
> than "Files whose name starts".
OK, changed.
Thanks,
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [lm-sensors] [PATCH 4/6] Read extra configuration files from
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
` (3 preceding siblings ...)
2009-02-13 17:41 ` Jean Delvare
@ 2009-02-14 4:44 ` Matt Roberds
2009-02-14 8:38 ` Jean Delvare
5 siblings, 0 replies; 7+ messages in thread
From: Matt Roberds @ 2009-02-14 4:44 UTC (permalink / raw)
To: lm-sensors
On Fri, 13 Feb 2009, Jean Delvare wrote:
> On Thu, 12 Feb 2009 23:23:12 -0600 (CST), Matt Roberds wrote:
>> On Wed, 11 Feb 2009, Jean Delvare wrote:
>>> + char path[16 + NAME_MAX];
>>
>> This says that the maximum length of the path to the config files is
>> 16 characters? Seems kind of short.
>
> Not really. There is no strong delimiter between the directory name
> and the configuration file name, what is limited is the total length.
Ah, right. As long as NAME_MAX is huge this might not be a big deal.
> Even including the full board manufacturer and model names in the
> configuration file name is hardly going to exceed 50 characters.
A well-known businessman once said something about 640 KB. :)
> I don't know the exact semantics of PATH_MAX but I suspect it includes
> all the directory names _and_ the file name, so adding MAX_NAME to it
> doesn't make sense.
The GNU libc docs at
http://www.gnu.org/software/libtool/manual/libc/Limits-for-Files.html#Limits-for-Files
spell it out, citing POSIX. Note that it can be different for different
filesystems; you can ask at runtime if you really want to know:
http://www.gnu.org/software/libtool/manual/libc/Pathconf.html#Pathconf
On the other hand, the man page for pathconf on my system says "Some
returned values may be huge; they are not suitable for allocating
memory."
Matt Roberds
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [lm-sensors] [PATCH 4/6] Read extra configuration files from
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
` (4 preceding siblings ...)
2009-02-14 4:44 ` Matt Roberds
@ 2009-02-14 8:38 ` Jean Delvare
5 siblings, 0 replies; 7+ messages in thread
From: Jean Delvare @ 2009-02-14 8:38 UTC (permalink / raw)
To: lm-sensors
On Fri, 13 Feb 2009 22:44:19 -0600 (CST), Matt Roberds wrote:
> On Fri, 13 Feb 2009, Jean Delvare wrote:
> > On Thu, 12 Feb 2009 23:23:12 -0600 (CST), Matt Roberds wrote:
> >> On Wed, 11 Feb 2009, Jean Delvare wrote:
> >>> + char path[16 + NAME_MAX];
> >>
> >> This says that the maximum length of the path to the config files is
> >> 16 characters? Seems kind of short.
> >
> > Not really. There is no strong delimiter between the directory name
> > and the configuration file name, what is limited is the total length.
>
> Ah, right. As long as NAME_MAX is huge this might not be a big deal.
>
> > Even including the full board manufacturer and model names in the
> > configuration file name is hardly going to exceed 50 characters.
>
> A well-known businessman once said something about 640 KB. :)
>
> > I don't know the exact semantics of PATH_MAX but I suspect it includes
> > all the directory names _and_ the file name, so adding MAX_NAME to it
> > doesn't make sense.
>
> The GNU libc docs at
> http://www.gnu.org/software/libtool/manual/libc/Limits-for-Files.html#Limits-for-Files
> spell it out, citing POSIX. Note that it can be different for different
OK, thanks for the pointer.
> filesystems; you can ask at runtime if you really want to know:
> http://www.gnu.org/software/libtool/manual/libc/Pathconf.html#Pathconf
> On the other hand, the man page for pathconf on my system says "Some
> returned values may be huge; they are not suitable for allocating
> memory."
I'd rather keep the code simple, and only change it if someone
expresses an actual need for that.
--
Jean Delvare
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-02-14 8:38 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-11 16:50 [lm-sensors] [PATCH 4/6] Read extra configuration files from Jean Delvare
2009-02-13 5:23 ` Matt Roberds
2009-02-13 11:47 ` Jean Delvare
2009-02-13 11:56 ` Charles
2009-02-13 17:41 ` Jean Delvare
2009-02-14 4:44 ` Matt Roberds
2009-02-14 8:38 ` Jean Delvare
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.