aboutsummaryrefslogtreecommitdiff
path: root/src/config.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2007-09-04 19:46:00 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2007-09-04 19:46:00 +0000
commit4f3506f536f7efb34e5b3b823ac030d89e3bd5e1 (patch)
treecf0b6a580b35e91b9961836a62383cb50449ce94 /src/config.c
parentf874c8c3e461fb326887273334f1dffebbbe4179 (diff)
downloadwydawca-4f3506f536f7efb34e5b3b823ac030d89e3bd5e1.tar.gz
wydawca-4f3506f536f7efb34e5b3b823ac030d89e3bd5e1.tar.bz2
Update
git-svn-id: file:///svnroot/wydawca/trunk@311 6bb4bd81-ecc2-4fd4-a2d4-9571d19c0d33
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c88
1 files changed, 66 insertions, 22 deletions
diff --git a/src/config.c b/src/config.c
index 023f2a1..f1a4d9f 100644
--- a/src/config.c
+++ b/src/config.c
@@ -484,6 +484,7 @@ cfg_directory (gsc_config_file_t *file, char *kw, char *val, void *unused)
char *word;
struct directory_pair dpair;
static struct gsc_config_keyword keywords[] = {
+ { "include", cfg_include_handler },
{ "source", cfg_source },
{ "destination", cfg_destination },
{ "file-sweep-time", cfg_file_sweep_time },
@@ -514,7 +515,18 @@ cfg_directory (gsc_config_file_t *file, char *kw, char *val, void *unused)
gsc_config_parse_block (file, &dpair, keywords, "end");
- if (test_dir (dpair.source_dir, &ec))
+ if (!dpair.source_dir)
+ {
+ file->error_msg (file->file_name, file->line, "source is not given");
+ file->error_count++;
+ }
+ else if (!dpair.dest_dir)
+ {
+ file->error_msg (file->file_name, file->line,
+ "destination is not given");
+ file->error_count++;
+ }
+ else if (test_dir (dpair.source_dir, &ec))
{
if (ec)
file->error_msg (file->file_name, file->line,
@@ -627,6 +639,7 @@ cfg_sql (gsc_config_file_t *file, char *kw, char *val, void *unused)
{
struct sqlconn sql;
static struct gsc_config_keyword keywords[] = {
+ { "include", cfg_include_handler },
{ "host", cfg_sql_host },
{ "database", cfg_sql_database },
{ "user", cfg_sql_user },
@@ -834,7 +847,52 @@ end_marker_p (const char *buf, const char *word, size_t wlen)
}
return 0;
}
-
+
+static int
+_cfg_recursive_raw_read (gsc_config_file_t *file, struct obstack *stk,
+ char *word, size_t wlen, int skip_initial_ws)
+{
+ while (getline (&file->buf, &file->size, file->fp) > 0)
+ {
+ char *p = file->buf;
+
+ file->line++;
+
+ if (skip_initial_ws)
+ skip_hws (p);
+
+ if (end_marker_p (p, word, wlen))
+ {
+ obstack_1grow (stk, 0);
+ return 0;
+ }
+ else if (strlen (p) > 7 && memcmp (p, "include", 7) == 0
+ && (p[7] == ' ' || p[8] == '\t'))
+ {
+ gsc_config_file_t new_file;
+
+ p += 7;
+ skip_hws (p);
+ trim (p);
+ if (cfg_include_start (&new_file, file, p) == 0)
+ {
+ int rc = _cfg_recursive_raw_read (&new_file, stk,
+ word, wlen, skip_initial_ws);
+ cfg_include_stop (&new_file);
+ if (rc == 0)
+ return 0;
+ }
+ }
+ else
+ {
+ if (*p == '>')
+ p++;
+ obstack_grow (stk, p, strlen (p));
+ }
+ }
+ return 1;
+}
+
static int
_cfg_raw_read (gsc_config_file_t *file, char *val, struct obstack *stk)
{
@@ -853,29 +911,14 @@ _cfg_raw_read (gsc_config_file_t *file, char *val, struct obstack *stk)
word++;
}
wlen = strlen (word);
-
- while (getline (&buf, &size, file->fp) > 0)
+
+ if (_cfg_recursive_raw_read (file, stk, word, wlen, skip_initial_ws))
{
- char *p = buf;
-
- file->line++;
-
- if (skip_initial_ws)
- skip_hws (p);
- if (end_marker_p (p, word, wlen))
- {
- obstack_1grow (stk, 0);
- free (buf);
- return 0;
- }
- obstack_grow (stk, p, strlen (p));
+ file->error_msg (file->file_name, start_line, "missing end marker");
+ file->error_count++;
}
-
- file->error_msg (file->file_name, start_line, "missing end marker");
- file->error_count++;
- return 1;
}
-
+
static void
cfg_admin_stat_message (gsc_config_file_t *file, char *kw, char *val,
void *unused)
@@ -976,6 +1019,7 @@ cfg_user_message (gsc_config_file_t *file, char *kw, char *val, void *unused)
static struct gsc_config_keyword kw_handler[] = {
+ { "include", cfg_include_handler },
{ "syslog-tag", cfg_syslog_tag },
{ "syslog-facility", cfg_syslog_facility },
{ "syslog-print-priority", cfg_syslog_print_priority },

Return to:

Send suggestions and report system problems to the System administrator.