Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

commit 239c570052c0e2fdd971404cd2121460ba520651 Author: Raniconduh <clagv.randomgames@gmail.com> Date: Sun Jan 29 23:18:14 2023 +0000 Add/change warnings for variable setting in config file and with :var command diff --git a/include/info.h b/include/info.h index 64b8114..b45f917 100644 --- a/include/info.h +++ b/include/info.h @@ -97 +97 @@ enum info_t {      void info_init(void); -void display_info(enum info_t, char *); +void display_info(enum info_t, char *, ...);  void refresh_info(void);  void page_info(void);   diff --git a/include/opts.h b/include/opts.h index daa6a70..d293afa 100644 --- a/include/opts.h +++ b/include/opts.h @@ -106 +1012 @@    #define COLOR_DEFAULT 0xFFFFFFFF   +enum var_stat { + VAR_STAT_OK, + VAR_STAT_NOEQ, // no equals sign + VAR_STAT_NOTYPE, +}; +  struct opener_t {   char * fpath;   size_t nlen; @@ -576 +636 @@ void create_config(void);  void read_config(void);  void terminate_opts(void);  void generate_colors(void); -void parse_var(char *); +enum var_stat parse_var(char *);    #endif /* _OPTS_H */ diff --git a/src/info.c b/src/info.c index cfd958d..7e01f9e 100644 --- a/src/info.c +++ b/src/info.c @@ -16 +18 @@  #include <ncurses.h>  #include <stdlib.h>  #include <string.h> +#include <stdarg.h> +#include <stdio.h>    #include "info.h"  #include "io.h" @@ -367 +387 @@ void info_init(void) {  }     -void display_info(enum info_t type, char * msg) { +void display_info(enum info_t type, char * fmt, ...) {   if (!info_buffer.i) info_buffer.i = malloc(sizeof(struct info_node*) * 32);     // realloc every 32 @@ -4911 +5116 @@ void display_info(enum info_t type, char * msg) {   info_buffer.i[n] = malloc(sizeof(struct info_node));   info_buffer.i[n]->type = type;   - info_buffer.i[n]->msg = malloc(strlen(msg) + 1); - strcpy(info_buffer.i[n]->msg, msg); + va_list vlist; + va_start(vlist, fmt);   - info_buffer.n++; + size_t nl = vsnprintf(NULL, 0, fmt, vlist); + info_buffer.i[n]->msg = malloc(nl + 1); + vsprintf(info_buffer.i[n]->msg, fmt, vlist); + + va_end(vlist);   + info_buffer.n++;   refresh_info();  }   diff --git a/src/main.c b/src/main.c index 4441320..21dc5ff 100644 --- a/src/main.c +++ b/src/main.c @@ -4278 +42719 @@ int main(int argc, char ** argv) {   char * cmd = inp;   char * args = ++sp;   if (!strcmp(cmd, "set")) set(args); - else if (!strcmp(cmd, "var")) parse_var(args); - else if (!strcmp(cmd, "unset")) unset(args); + else if (!strcmp(cmd, "var")) switch (parse_var(args)) { + case VAR_STAT_NOEQ: + display_info(INFO_WARN, + "Missing '=' in variable definition"); + break; + case VAR_STAT_NOTYPE: + display_info(INFO_WARN, + "Missing or unknown type"); + break; + default: + case VAR_STAT_OK: + break; + } else if (!strcmp(cmd, "unset")) unset(args);   } else if (!strcmp(inp, "ma") && !cutting)   mark_all();   else if (!strcmp(inp, "mu")) { diff --git a/src/opts.c b/src/opts.c index 272860f..a9cc5b3 100644 --- a/src/opts.c +++ b/src/opts.c @@ -967 +967 @@ void create_config(void) {  }     -void parse_var(char * var) { +enum var_stat parse_var(char * var) {   char * line = var;   // go past leading white space   while (*var && isspace(*var)) var++; @@ -10510 +1057 @@ void parse_var(char * var) {     // add null terminator to var   char * val = strchr(var, '='); - if (!val) { - display_info(INFO_WARN, "Missing '=' in config file"); - return; - } + if (!val) return VAR_STAT_NOEQ;     while (val + n > line && isspace(val[--n]));   val[n + 1] = 0; @@ -13118 +12817 @@ void parse_var(char * var) {   // -2 to compensate for inc on prev line & for strlen   val[vlen - 2] = 0;   ptr_val = val; - } else { - display_info(INFO_WARN, "Unknown variable type in config file"); - return; - } + } else return VAR_STAT_NOTYPE;     var_set(var, ptr_val); + return VAR_STAT_OK;  }      void read_config(void) {   FILE * fp = fopen(csc_config_file, "r");   + size_t l = 1;   bool done = false;   // read by line   char line[256]; @@ -1617 +15721 @@ void read_config(void) {   }     line[len] = '\0'; - if (*line) parse_var(line); + if (*line) switch (parse_var(line)) { + case VAR_STAT_NOEQ: + display_info(INFO_WARN, + "Config line %lu: Missing '=' in variable definition", l); + break; + case VAR_STAT_NOTYPE: + display_info(INFO_WARN, + "Config line %lu: Missing or unknown type", l); + break; + default: + case VAR_STAT_OK: + break; + } + + l++;   }     fclose(fp);