commit 239c570052c0e2fdd971404cd2121460ba520651
Author: Raniconduh <clagv.randomgames@gmail.com>
Date: Sun Jan 29 23:18:14 2023 +0000
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);