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:
parent
2213d6976c
commit
17c4748dfa
16
src/config.c
16
src/config.c
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user