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 ) get_arg( conffile_t *cfile, int required, int *comment )
{ {
char *ret, *p, *t; char *ret, *p, *t;
int quoted; int escaped, quoted;
char c; char c;
p = cfile->rest; p = cfile->rest;
@ -64,9 +64,14 @@ get_arg( conffile_t *cfile, int required, int *comment )
} }
ret = 0; ret = 0;
} else { } else {
for (quoted = 0, ret = t = p; c; c = *p) { for (escaped = 0, quoted = 0, ret = t = p; c; c = *p) {
p++; p++;
if (c == '"') if (escaped && c >= 32) {
escaped = 0;
*t++ = c;
} else if (c == '\\')
escaped = 1;
else if (c == '"')
quoted ^= 1; quoted ^= 1;
else if (!quoted && isspace( (unsigned char) c )) else if (!quoted && isspace( (unsigned char) c ))
break; break;
@ -74,6 +79,11 @@ get_arg( conffile_t *cfile, int required, int *comment )
*t++ = c; *t++ = c;
} }
*t = 0; *t = 0;
if (escaped) {
error( "%s:%d: unterminated escape sequence\n", cfile->file, cfile->line );
cfile->err = 1;
ret = 0;
}
if (quoted) { if (quoted) {
error( "%s:%d: missing closing quote\n", cfile->file, cfile->line ); error( "%s:%d: missing closing quote\n", cfile->file, cfile->line );
cfile->err = 1; 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. 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. Lines starting with a hash mark (\fB#\fR) are comments and are ignored entirely.
Configuration items are keywords followed by one or more arguments; 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. All keywords (including those used as arguments) are case-insensitive.
Bash-like home directory expansion using the tilde (\fB~\fR) is supported Bash-like home directory expansion using the tilde (\fB~\fR) is supported
in all options which represent local paths. in all options which represent local paths.