support backslash-escaping in the config file

note that no attempt is made at making this work in the compat wrapper.
This commit is contained in:
Oswald Buddenhagen 2013-09-25 20:56:52 +02:00
parent 2213d6976c
commit 17c4748dfa
2 changed files with 15 additions and 4 deletions

View File

@ -48,7 +48,7 @@ static char *
get_arg( conffile_t *cfile, int required, int *comment )
{
char *ret, *p, *t;
int quoted;
int escaped, quoted;
char c;
p = cfile->rest;
@ -64,9 +64,14 @@ get_arg( conffile_t *cfile, int required, int *comment )
}
ret = 0;
} else {
for (quoted = 0, ret = t = p; c; c = *p) {
for (escaped = 0, quoted = 0, ret = t = p; c; c = *p) {
p++;
if (c == '"')
if (escaped && c >= 32) {
escaped = 0;
*t++ = c;
} else if (c == '\\')
escaped = 1;
else if (c == '"')
quoted ^= 1;
else if (!quoted && isspace( (unsigned char) c ))
break;
@ -74,6 +79,11 @@ get_arg( conffile_t *cfile, int required, int *comment )
*t++ = c;
}
*t = 0;
if (escaped) {
error( "%s:%d: unterminated escape sequence\n", cfile->file, cfile->line );
cfile->err = 1;
ret = 0;
}
if (quoted) {
error( "%s:%d: missing closing quote\n", cfile->file, cfile->line );
cfile->err = 1;

View File

@ -88,7 +88,8 @@ If specified twice, suppress warning messages as well.
The configuration file is mandatory; \fBmbsync\fR will not run without it.
Lines starting with a hash mark (\fB#\fR) are comments and are ignored entirely.
Configuration items are keywords followed by one or more arguments;
arguments containing spaces must be enclosed in double quotes (\fB"\fR).
arguments containing spaces must be enclosed in double quotes (\fB"\fR),
and literal double quotes and backslashes (\fB\\\fR) must be backslash-escaped.
All keywords (including those used as arguments) are case-insensitive.
Bash-like home directory expansion using the tilde (\fB~\fR) is supported
in all options which represent local paths.