From b15ab051f0eefad719162617eaa824ee47c07509 Mon Sep 17 00:00:00 2001 From: krizej Date: Fri, 9 Feb 2024 22:48:16 +0100 Subject: [PATCH] separator module (#1) first module which uses the config :-) Co-authored-by: krizej <60076189+krizej@users.noreply.github.com> Reviewed-on: https://git.jacekpoz.pl/jacekpoz/modfetch/pulls/1 Co-authored-by: krizej Co-committed-by: krizej --- 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..e3e9916 --- /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) == 0) { + 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) == 0) { + 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) * sizeof(char)); + 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 * sizeof(char)); + *ret = 0; + return ret; + } + + ret = malloc((length * sep_char_length + 1) * sizeof(char)); + 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; +}