aboutsummaryrefslogtreecommitdiff
path: root/sway/config.c
diff options
context:
space:
mode:
authorBrian Ashworth <bosrsf04@gmail.com>2019-01-11 20:41:38 -0500
committerBrian Ashworth <bosrsf04@gmail.com>2019-01-11 20:41:38 -0500
commitb43345a1a3ccb1c6cf6a836cf64521c5d3bcbb49 (patch)
tree3827236b3deac540ea228d269b84d505aa1c9582 /sway/config.c
parentd256182f492c3d8a6803fa2a5880b1283fbe1e4c (diff)
config: fix line number with continued lines
When the config has continued lines, `get_line_with_cont` may read more than one line of the actual file. When displaying line numbers for error messages, they should be the line number in the file to make it easy to find and fix the issue.
Diffstat (limited to 'sway/config.c')
-rw-r--r--sway/config.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sway/config.c b/sway/config.c
index 26d22842..b14ebba7 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -571,15 +571,18 @@ bool load_include_configs(const char *path, struct sway_config *config,
}
// get line, with backslash continuation
-static ssize_t getline_with_cont(char **lineptr, size_t *line_size, FILE *file) {
+static ssize_t getline_with_cont(char **lineptr, size_t *line_size, FILE *file,
+ int *nlines) {
char *next_line = NULL;
size_t next_line_size = 0;
ssize_t nread = getline(lineptr, line_size, file);
+ *nlines = nread == -1 ? 0 : 1;
while (nread >= 2 && strcmp(&(*lineptr)[nread - 2], "\\\n") == 0) {
ssize_t next_nread = getline(&next_line, &next_line_size, file);
if (next_nread == -1) {
break;
}
+ (*nlines)++;
nread += next_nread - 2;
if ((ssize_t) *line_size < nread + 1) {
@@ -663,7 +666,8 @@ bool read_config(FILE *file, struct sway_config *config,
ssize_t nread;
list_t *stack = create_list();
size_t read = 0;
- while ((nread = getline_with_cont(&line, &line_size, file)) != -1) {
+ int nlines = 0;
+ while ((nread = getline_with_cont(&line, &line_size, file, &nlines)) != -1) {
if (reading_main_config) {
if (read + nread > config_size) {
wlr_log(WLR_ERROR, "Config file changed during reading");
@@ -679,7 +683,7 @@ bool read_config(FILE *file, struct sway_config *config,
line[nread - 1] = '\0';
}
- line_number++;
+ line_number += nlines;
wlr_log(WLR_DEBUG, "Read line %d: %s", line_number, line);
strip_whitespace(line);