mirror of
https://github.com/swaywm/sway.git
synced 2024-11-10 20:44:01 +01:00
Address first round of review for generic blocks
This commit is contained in:
parent
51bb9d8573
commit
8bfa2def88
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user