From 0803746830363deae152d867c6cacfd599c91023 Mon Sep 17 00:00:00 2001 From: krizej <60076189+krizej@users.noreply.github.com> Date: Fri, 9 Feb 2024 16:20:42 +0100 Subject: [PATCH] sep module --- modules/sep.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 modules/sep.c diff --git a/modules/sep.c b/modules/sep.c new file mode 100644 index 0000000..29df414 --- /dev/null +++ b/modules/sep.c @@ -0,0 +1,66 @@ +/* SEP - separator module for modfetch + * + * options: name (default value) + * sep (8) specifies how long the separator should be + * char (-) specifies the character (or string) to use for the separator + * + * author: krizej + * 09 Feb 2024 + */ + +#include "../mod.h" +#include +#include + +uint8_t version_major(void) { return 1; } +uint8_t version_minor(void) { return 0; } +uint8_t version_patch(void) { return 0; } +const char *module_name(void) { return "sep"; } + +static size_t length = 8; +static char *sep_char = "-"; +static size_t sep_char_length = 1; + +void init(char **config) { + for(char *opt = *config; opt != NULL; opt = *++config) { + if(!strncmp(opt, "sep", 3)) { + char *valstr = opt + 4; // skip 'sep=' + long value = strtol(valstr, NULL, 10); + + if(value >= 0) { + length = (size_t) value; + } + } else if(!strncmp(opt, "char", 4)) { + char *value = opt + 5; // skip 'char=' + + if(*value != 0) { // todo: see if there are any more characters that should be rejected + sep_char_length = strlen(value); + sep_char = malloc(sep_char_length + 1); + strncpy(sep_char, value, sep_char_length); + sep_char[sep_char_length] = '\0'; + } else { + sep_char = NULL; + } + } + } +} + +const char *get(void) { + char *ret; + + if(sep_char == NULL) { + ret = malloc(1); + *ret = 0; + return ret; + } + + ret = malloc(length * sep_char_length + 1); + memset(ret, 0, length * sep_char_length + 1); + + for(size_t i = 0; i < length; i++) + strncat(ret, sep_char, sep_char_length); + + ret[length * sep_char_length] = '\0'; // just to be sure :-D + + return ret; +}