4
* Configuration file parser for userland suspend tools
6
* Copyright (C) 2006 Rafael J. Wysocki <rjw@sisk.pl>
8
* This file is released under the GPLv2.
12
#include <sys/types.h>
24
* parse - read and parse the configuration file
27
static int parse(char *my_name, char *file_name, int parc, struct config_par *parv)
29
char *str, *dst, *fmt, buf[MAX_STR_LEN];
33
file = fopen(file_name, "r");
35
fprintf(stderr, "%s: Could not open configuration file\n",
42
str = fgets(buf, MAX_STR_LEN, file);
49
/* Skip white space */
50
while (*str == ' ' || *str == '\t' || *str == '\r' || *str == '\n')
52
/* Skip the lines containing white space only */
55
/* Compare with parameter names */
56
for (j = 0; j < parc; j++) {
57
k = strlen(parv[j].name);
58
if (!strncmp(parv[j].name, str, k)) {
62
while (*str == ' ' || *str == '\t')
64
if (*str != ':' && *str != '=') {
69
while (*str == ' ' || *str == '\t')
73
if (!strncmp(fmt, "%s", 2)) {
76
strncpy(dst, str, k - 1);
81
k = sscanf(str, fmt, parv[j].ptr);
94
fprintf(stderr, "%s: Error in configuration file, line %d\n",
99
int get_config(char *my_name, int argc, char *argv[],
100
int parc, struct config_par *parv, char *special)
102
struct stat stat_buf;
106
if (!stat(CONFIG_FILE, &stat_buf))
107
ret = parse(my_name, CONFIG_FILE, parc, parv);
108
if (ret < 0 || argc < 2)
110
strncpy(special, argv[1], MAX_STR_LEN - 1);
114
if (strncmp(argv[1], "-f", 2)) {
115
fprintf(stderr, "Usage: %s [-f config][resume_device]\n",
120
ret = parse(my_name, argv[2], parc, parv);
125
strncpy(special, argv[3], MAX_STR_LEN - 1);