diff options
Diffstat (limited to 'sway/config.c')
-rw-r--r-- | sway/config.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sway/config.c b/sway/config.c index ea9f23dd..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, | |||
571 | } | 571 | } |
572 | 572 | ||
573 | // get line, with backslash continuation | 573 | // get line, with backslash continuation |
574 | static ssize_t getline_with_cont(char **lineptr, size_t *line_size, FILE *file) { | 574 | static ssize_t getline_with_cont(char **lineptr, size_t *line_size, FILE *file, |
575 | int *nlines) { | ||
575 | char *next_line = NULL; | 576 | char *next_line = NULL; |
576 | size_t next_line_size = 0; | 577 | size_t next_line_size = 0; |
577 | ssize_t nread = getline(lineptr, line_size, file); | 578 | ssize_t nread = getline(lineptr, line_size, file); |
579 | *nlines = nread == -1 ? 0 : 1; | ||
578 | while (nread >= 2 && strcmp(&(*lineptr)[nread - 2], "\\\n") == 0) { | 580 | while (nread >= 2 && strcmp(&(*lineptr)[nread - 2], "\\\n") == 0) { |
579 | ssize_t next_nread = getline(&next_line, &next_line_size, file); | 581 | ssize_t next_nread = getline(&next_line, &next_line_size, file); |
580 | if (next_nread == -1) { | 582 | if (next_nread == -1) { |
581 | break; | 583 | break; |
582 | } | 584 | } |
585 | (*nlines)++; | ||
583 | 586 | ||
584 | nread += next_nread - 2; | 587 | nread += next_nread - 2; |
585 | if ((ssize_t) *line_size < nread + 1) { | 588 | if ((ssize_t) *line_size < nread + 1) { |
@@ -613,7 +616,9 @@ static int detect_brace(FILE *file) { | |||
613 | } | 616 | } |
614 | } | 617 | } |
615 | free(line); | 618 | free(line); |
616 | fseek(file, pos, SEEK_SET); | 619 | if (ret == 0) { |
620 | fseek(file, pos, SEEK_SET); | ||
621 | } | ||
617 | return ret; | 622 | return ret; |
618 | } | 623 | } |
619 | 624 | ||
@@ -661,7 +666,8 @@ bool read_config(FILE *file, struct sway_config *config, | |||
661 | ssize_t nread; | 666 | ssize_t nread; |
662 | list_t *stack = create_list(); | 667 | list_t *stack = create_list(); |
663 | size_t read = 0; | 668 | size_t read = 0; |
664 | while ((nread = getline_with_cont(&line, &line_size, file)) != -1) { | 669 | int nlines = 0; |
670 | while ((nread = getline_with_cont(&line, &line_size, file, &nlines)) != -1) { | ||
665 | if (reading_main_config) { | 671 | if (reading_main_config) { |
666 | if (read + nread > config_size) { | 672 | if (read + nread > config_size) { |
667 | wlr_log(WLR_ERROR, "Config file changed during reading"); | 673 | wlr_log(WLR_ERROR, "Config file changed during reading"); |
@@ -677,7 +683,7 @@ bool read_config(FILE *file, struct sway_config *config, | |||
677 | line[nread - 1] = '\0'; | 683 | line[nread - 1] = '\0'; |
678 | } | 684 | } |
679 | 685 | ||
680 | line_number++; | 686 | line_number += nlines; |
681 | wlr_log(WLR_DEBUG, "Read line %d: %s", line_number, line); | 687 | wlr_log(WLR_DEBUG, "Read line %d: %s", line_number, line); |
682 | 688 | ||
683 | strip_whitespace(line); | 689 | strip_whitespace(line); |