Address first round of review for generic blocks

This commit is contained in:
Brian Ashworth 2018-05-30 22:23:11 -04:00
parent 51bb9d8573
commit 8bfa2def88
10 changed files with 34 additions and 32 deletions

View File

@ -1,3 +1,4 @@
#define _POSIX_C_SOURCE 200809L
#include "readline.h"
#include "log.h"
#include <stdlib.h>
@ -48,15 +49,21 @@ char *read_line(FILE *file) {
return string;
}
char *peek_line(FILE *file, int offset) {
int pos = ftell(file);
char *line = NULL;
char *peek_line(FILE *file, int offset, long *position) {
long pos = ftell(file);
size_t length = 1;
char *line = calloc(1, length);
for (int i = 0; i <= offset; i++) {
free(line);
line = read_line(file);
if (!line) {
ssize_t read = getline(&line, &length, file);
if (read < 0) {
break;
}
if (line[read - 1] == '\n') {
line[read - 1] = '\0';
}
}
if (position) {
*position = ftell(file);
}
fseek(file, pos, SEEK_SET);
return line;

View File

@ -4,7 +4,7 @@
#include <stdio.h>
char *read_line(FILE *file);
char *peek_line(FILE *file, int offset);
char *peek_line(FILE *file, int offset, long *position);
char *read_line_buffer(FILE *file, char *string, size_t string_len);
#endif

View File

@ -60,8 +60,8 @@ struct cmd_results *config_command(char *command);
/**
* Parse and handle a sub command
*/
struct cmd_results *subcommand(char **argv, int argc,
struct cmd_handler *handlers, int handlers_size);
struct cmd_results *config_subcommand(char **argv, int argc,
struct cmd_handler *handlers, size_t handlers_size);
/*
* Parses a command policy rule.
*/

View File

@ -376,8 +376,8 @@ cleanup:
return results;
}
struct cmd_results *subcommand(char **argv, int argc,
struct cmd_handler *handlers, int handlers_size) {
struct cmd_results *config_subcommand(char **argv, int argc,
struct cmd_handler *handlers, size_t handlers_size) {
char *command = join_args(argv, argc);
wlr_log(L_DEBUG, "Subcommand: %s", command);
free(command);

View File

@ -52,7 +52,7 @@ struct cmd_results *cmd_bar(int argc, char **argv) {
return cmd_results_new(CMD_FAILURE, "bar",
"Can only be used in config file.");
}
return subcommand(argv, argc, bar_config_handlers,
return config_subcommand(argv, argc, bar_config_handlers,
sizeof(bar_config_handlers));
}
@ -111,5 +111,5 @@ struct cmd_results *cmd_bar(int argc, char **argv) {
wlr_log(L_DEBUG, "Creating bar %s", bar->id);
}
return subcommand(argv, argc, bar_handlers, sizeof(bar_handlers));
return config_subcommand(argv, argc, bar_handlers, sizeof(bar_handlers));
}

View File

@ -52,7 +52,7 @@ static struct cmd_results *parse_three_colors(char ***colors,
}
struct cmd_results *bar_cmd_colors(int argc, char **argv) {
return subcommand(argv, argc, bar_colors_handlers,
return config_subcommand(argv, argc, bar_colors_handlers,
sizeof(bar_colors_handlers));
}

View File

@ -42,8 +42,8 @@ struct cmd_results *cmd_input(int argc, char **argv) {
return cmd_results_new(CMD_FAILURE, NULL, "Couldn't allocate config");
}
struct cmd_results *res = subcommand(argv + 1, argc - 1, input_handlers,
sizeof(input_handlers));
struct cmd_results *res = config_subcommand(argv + 1, argc - 1,
input_handlers, sizeof(input_handlers));
free_input_config(config->handler_context.input_config);
config->handler_context.input_config = NULL;

View File

@ -65,8 +65,8 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
}
// Create binding
struct cmd_results *result = subcommand(argv + 1, argc - 1, mode_handlers,
sizeof(mode_handlers));
struct cmd_results *result = config_subcommand(argv + 1, argc - 1,
mode_handlers, sizeof(mode_handlers));
config->current_mode = config->modes->items[0];
return result;

View File

@ -24,8 +24,8 @@ struct cmd_results *cmd_seat(int argc, char **argv) {
"Couldn't allocate config");
}
struct cmd_results *res = subcommand(argv + 1, argc - 1, seat_handlers,
sizeof(seat_handlers));
struct cmd_results *res = config_subcommand(argv + 1, argc - 1,
seat_handlers, sizeof(seat_handlers));
free_seat_config(config->handler_context.seat_config);
config->handler_context.seat_config = NULL;

View File

@ -518,21 +518,20 @@ static int detect_brace_on_following_line(FILE *file, char *line,
int lines = 0;
if (line[strlen(line) - 1] != '{' && line[strlen(line) - 1] != '}') {
char *peeked = NULL;
long position = 0;
do {
wlr_log(L_DEBUG, "Peeking line %d", line_number + lines + 1);
free(peeked);
peeked = peek_line(file, lines);
peeked = peek_line(file, lines, &position);
if (peeked) {
peeked = strip_whitespace(peeked);
}
wlr_log(L_DEBUG, "Peeked line: `%s`", peeked);
lines++;
} while (peeked && strlen(peeked) == 0);
if (peeked && strlen(peeked) == 1 && peeked[0] == '{') {
for (int i = 0; i < lines; i++) {
free(peeked);
peeked = read_line(file);
}
fseek(file, position, SEEK_SET);
} else {
lines = 0;
}
@ -541,7 +540,7 @@ static int detect_brace_on_following_line(FILE *file, char *line,
return lines;
}
static char *expand_line(char *block, char *line, bool add_brace) {
static char *expand_line(const char *block, const char *line, bool add_brace) {
int size = (block ? strlen(block) + 1 : 0) + strlen(line)
+ (add_brace ? 2 : 0) + 1;
char *expanded = calloc(1, size);
@ -549,10 +548,8 @@ static char *expand_line(char *block, char *line, bool add_brace) {
wlr_log(L_ERROR, "Cannot allocate expanded line buffer");
return NULL;
}
strcat(expanded, block ? block : "");
strcat(expanded, block ? " " : "");
strcat(expanded, line);
strcat(expanded, add_brace ? " {" : "");
snprintf(expanded, size, "%s%s%s%s", block ? block : "",
block ? " " : "", line, add_brace ? " {" : "");
return expanded;
}
@ -594,9 +591,7 @@ bool read_config(FILE *file, struct sway_config *config) {
// Special case
res = config_commands_command(expanded);
} else {
wlr_log(L_DEBUG, "Entering c_c");
res = config_command(expanded);
wlr_log(L_DEBUG, "Exiting c_c");
}
free(expanded);
switch(res->status) {