Allow backslash line continuation in catsit.conf

This commit is contained in:
C. McEnroe 2021-09-28 16:18:48 -04:00
parent b5437a42f9
commit 909cbf3029
2 changed files with 36 additions and 3 deletions

View File

@ -1,4 +1,4 @@
.Dd March 1, 2021
.Dd September 28, 2021
.Dt CATSIT.CONF 5
.Os
.
@ -13,6 +13,10 @@ file lists the services managed by the
.Xr catsitd 8
daemon.
Leading whitespace is ignored.
The current line
can be extended over multiple lines
using a backslash
.Pq Ql \e .
Each line of the file
is one of the following:
.
@ -82,7 +86,8 @@ pounce/tilde pounce ${0#*/}.conf
pounce/libera pounce ${0#*/}.conf
# Privileged services:
@scooper kfcgi -d -U $USER -p ~/.local -- /bin/scooper
@scooper kfcgi -d -U $USER -p ~/.local -- \e
/bin/scooper /share/litterbox/litterbox.sqlite
.Ed
.
.Sh SEE ALSO

View File

@ -49,6 +49,34 @@ static void signalHandler(int signal) {
signals[signal] = 1;
}
static ssize_t getlinecont(char **line, size_t *lcap, FILE *file) {
size_t cap = 0;
char *buf = NULL;
ssize_t llen = getline(line, lcap, file);
while (llen > 1 && (*line)[llen - 1] == '\n' && (*line)[llen - 2] == '\\') {
llen -= 2;
ssize_t len = getline(&buf, &cap, file);
if (len < 0) {
llen = -1;
break;
}
size_t req = llen + len + 1;
if (req > *lcap) {
char *ptr = realloc(*line, req);
if (!ptr) {
llen = -1;
break;
}
*line = ptr;
*lcap = req;
}
strlcpy(*line + llen, buf, *lcap - llen);
llen += len;
}
free(buf);
return llen;
}
static int parseConfig(const char *path) {
int ret = -1;
size_t cap = 0;
@ -63,7 +91,7 @@ static int parseConfig(const char *path) {
prependClear();
int line = 1;
for (ssize_t len; 0 <= (len = getline(&buf, &cap, file)); ++line) {
for (ssize_t len; 0 <= (len = getlinecont(&buf, &cap, file)); ++line) {
if (buf[len - 1] == '\n') buf[len - 1] = '\0';
char *ptr = &buf[strspn(buf, WS)];