MGE System Utility Library - API Documentation  v1.4.7
Library of system utility functions.
configfile.c File Reference

Configuration file processing. More...

#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <configfile.h>
#include "internal.h"
#include <mge-errno.h>
Include dependency graph for configfile.c:

Functions

int parsefile (struct confsection *params, int nparams, char *filename)
 Parse a configuration file. More...
 
static char * getparamline (char *pline, FILE *stream)
 
static int parseline (struct confsection *params, int nparams, char *pline)
 
static int parsesection (struct confsection *params, int nparams, char *pline)
 
static int validatesection (struct confsection *params, int nparams, char *section)
 
static int parseparam (char *pline)
 
static int isolatekey (char *pline, char *endkey, char *key)
 
static int isolatevalue (char *startvalue, char *endvalue, char *value)
 
static int validatekeyvalue (char *key, char *value)
 
static int chkmandatories (struct confsection *params, int nparams)
 
static int chkkeys (struct confsection *section)
 
static int chkfileerr (FILE *fp)
 

Variables

static char line [MAX_LINE_LENGTH]
 
static char currentsection [MAX_KEYVAL_LENGTH]
 
static struct confsectionpcursect
 

Detailed Description

Configuration file processing.

configfile library source to process configuration files consisting of sections and parameters of key / value pairs.

Whitespace lines and empty lines are ignored.

Lines with a '#' as the first non-whitespace character are ignored as comment lines.

The first parameter line must be a section header.

Section headers are enclosed in [], [ must be the first non-whitespace character on the line and anything after the first ] is ignored.

All other lines are assumed to be parameter lines and after any initial whitespace characters they must have a parameter name, optional whitespace, a mandatory '=', optional whitespace and finishing with an optional word of characters and / or numbers.
e.g.

# Section General
[General]
# pollint is the polling interval in seconds.
pollint=5 <== This is legal.
large pollint=5 <== This is legal.
pollint = <== This is legal.
pollint <== This is illegal.

If a parameter is repeated then the last occurrence prevails.

An array of struct confsection's is provided by the library user to specify valid parameters and whether they are mandatory. A mandatory Key / Value pair for an optional Section is only enforced if the Section does appear, (is defined), in the config file.

Author
Copyright (C) 2015-2019, 2021, 2022 Mark Grant

Released under the GPLv3 only.
SPDX-License-Identifier: GPL-3.0-only

Version
v1.0.14 ==== 06/07/2022

Function Documentation

◆ chkfileerr()

static int chkfileerr ( FILE *  fp)
static

◆ chkkeys()

static int chkkeys ( struct confsection section)
static

◆ chkmandatories()

static int chkmandatories ( struct confsection params,
int  nparams 
)
static

◆ getparamline()

static char* getparamline ( char *  pline,
FILE *  stream 
)
static

◆ isolatekey()

static int isolatekey ( char *  pline,
char *  endkey,
char *  key 
)
static

◆ isolatevalue()

static int isolatevalue ( char *  startvalue,
char *  endvalue,
char *  value 
)
static

◆ parsefile()

int parsefile ( struct confsection params,
int  nparams,
char *  filename 
)

Parse a configuration file.

On error mge_errno is set.

Parameters
paramsPointer to a struct confsection array of parameters.
nparamsThe number of parameters.
filenameThe config filename.
Returns
0 for success, -mge_errno on failure.

◆ parseline()

static int parseline ( struct confsection params,
int  nparams,
char *  pline 
)
static

◆ parseparam()

static int parseparam ( char *  pline)
static

◆ parsesection()

static int parsesection ( struct confsection params,
int  nparams,
char *  pline 
)
static

◆ validatekeyvalue()

static int validatekeyvalue ( char *  key,
char *  value 
)
static

◆ validatesection()

static int validatesection ( struct confsection params,
int  nparams,
char *  section 
)
static

Variable Documentation

◆ currentsection

char currentsection[MAX_KEYVAL_LENGTH]
static

◆ line

char line[MAX_LINE_LENGTH]
static

◆ pcursect

struct confsection* pcursect
static