ptp4l: create [global] INI style config header
This patch creates a global heading for an INI style configuration file. The parser allows the default state to be global without the header as well as to use global. A future patch will enable per-port configuration settings. -v2 * Forgot a "\n" in the string comparison so that global mode wasn't recognized Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>master
parent
490c3e22a7
commit
e1d3dc560b
34
config.c
34
config.c
|
@ -22,6 +22,24 @@
|
||||||
#include "ether.h"
|
#include "ether.h"
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
|
|
||||||
|
enum config_section {
|
||||||
|
GLOBAL_SECTION,
|
||||||
|
UNKNOWN_SECTION,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int scan_mode(const char *s, enum config_section *section)
|
||||||
|
{
|
||||||
|
if (0 == strcasecmp(s, "[global]\n")) {
|
||||||
|
*section = GLOBAL_SECTION;
|
||||||
|
return 1;
|
||||||
|
} else if (s[0] == '[') {
|
||||||
|
*section = UNKNOWN_SECTION;
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int scan_pod(const char *s, struct port_defaults *pod)
|
static int scan_pod(const char *s, struct port_defaults *pod)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
@ -72,7 +90,7 @@ static int scan_pod(const char *s, struct port_defaults *pod)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scan_line(char *s, struct config *cfg)
|
static void scan_global_line(const char *s, struct config *cfg)
|
||||||
{
|
{
|
||||||
double df;
|
double df;
|
||||||
int i, val, cfg_ignore = cfg->cfg_ignore;
|
int i, val, cfg_ignore = cfg->cfg_ignore;
|
||||||
|
@ -234,10 +252,11 @@ static void scan_line(char *s, struct config *cfg)
|
||||||
|
|
||||||
int config_read(char *name, struct config *cfg)
|
int config_read(char *name, struct config *cfg)
|
||||||
{
|
{
|
||||||
|
enum config_section current_section = GLOBAL_SECTION;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char line[1024];
|
char line[1024];
|
||||||
|
|
||||||
fp = 0 == strncmp(name, "-", 2) ? stdin : fopen(name, "r");
|
fp = fopen(name, "r");
|
||||||
|
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
perror("fopen");
|
perror("fopen");
|
||||||
|
@ -245,7 +264,16 @@ int config_read(char *name, struct config *cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), fp)) {
|
while (fgets(line, sizeof(line), fp)) {
|
||||||
scan_line(line, cfg);
|
if (scan_mode(line, ¤t_section))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
switch(current_section) {
|
||||||
|
case GLOBAL_SECTION:
|
||||||
|
scan_global_line(line, cfg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
Loading…
Reference in New Issue