aboutsummaryrefslogtreecommitdiff
path: root/src/blocks
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-11-16 00:07:14 +0100
committerFederico Angelilli <code@fedang.net>2024-11-16 00:07:14 +0100
commit9843c8735a5a886252858a848c473cb877875ef4 (patch)
treea78faeb471f8547c5f7982e04a55595c742bdded /src/blocks
parente85ad7414c063e42296f7ef4e202829567484ac0 (diff)
Link scheme with block
Diffstat (limited to 'src/blocks')
-rw-r--r--src/blocks/date.c31
-rw-r--r--src/blocks/fs.c31
-rw-r--r--src/blocks/group.c20
-rw-r--r--src/blocks/ram.c31
-rw-r--r--src/blocks/scheme.c16
-rw-r--r--src/blocks/scheme.h20
-rw-r--r--src/blocks/text.c19
7 files changed, 81 insertions, 87 deletions
diff --git a/src/blocks/date.c b/src/blocks/date.c
index 93747c3..adb248e 100644
--- a/src/blocks/date.c
+++ b/src/blocks/date.c
@@ -2,7 +2,7 @@
#include <assert.h>
#include <time.h>
-#include "scheme.h"
+#include "../block.h"
#include "../any_log.h"
@@ -11,6 +11,11 @@ typedef struct {
char *format;
} block_date_t;
+static const struct timespec block_date_interval = {
+ .tv_sec = 1,
+ .tv_nsec = 0,
+};
+
static void block_date_update(block_t *block)
{
block_date_t *date = (block_date_t *)block;
@@ -26,6 +31,15 @@ static void block_date_update(block_t *block)
assert(date->block.text != NULL);
}
+static block_t *block_date_alloc(const block_scheme_t *scheme)
+{
+ block_t *block = calloc(1, sizeof(block_date_t));
+ block->type = BLOCK_TEXT;
+ block->update_interval = block_date_interval;
+ block->update_fn = block_date_update;
+ return block;
+}
+
static void block_date_clean(block_t *block)
{
block_date_t *date = (block_date_t *)block;
@@ -48,16 +62,9 @@ static bool block_date_validate(block_t *block, const block_scheme_t *scheme)
const block_scheme_t block_date_scheme = {
.name = "date",
- .block = {
- .type = BLOCK_TEXT,
- .update_interval = {
- .tv_sec = 1,
- .tv_nsec = 0,
- },
- .update_fn = block_date_update,
- .clean_fn = block_date_clean,
- },
- .size = sizeof(block_date_t),
.entries = NULL,
- .validate = block_date_validate,
+ .alloc_fn = block_date_alloc,
+ .clean_fn = block_date_clean,
+ .validate_fn = block_date_validate,
+ .resolve_fn = NULL,
};
diff --git a/src/blocks/fs.c b/src/blocks/fs.c
index 9bb4452..45ea0a3 100644
--- a/src/blocks/fs.c
+++ b/src/blocks/fs.c
@@ -6,7 +6,7 @@
#include <sys/statvfs.h>
#include <sys/stat.h>
-#include "scheme.h"
+#include "../block.h"
#include "../any_log.h"
@@ -16,6 +16,11 @@ typedef struct {
char *path;
} block_fs_t;
+static const struct timespec block_fs_interval = {
+ .tv_sec = 20,
+ .tv_nsec = 0,
+};
+
static void block_fs_update(block_t *block)
{
block_fs_t *fs = (block_fs_t *)block;
@@ -48,6 +53,15 @@ static void block_fs_update(block_t *block)
assert(fs->block.text != NULL);
}
+static block_t *block_fs_alloc(const block_scheme_t *scheme)
+{
+ block_t *block = calloc(1, sizeof(block_fs_t));
+ block->type = BLOCK_TEXT;
+ block->update_interval = block_fs_interval;
+ block->update_fn = block_fs_update;
+ return block;
+}
+
static void block_fs_clean(block_t *block)
{
block_fs_t *fs = (block_fs_t *)block;
@@ -90,16 +104,9 @@ static const config_entry_t block_fs_entries[] = {
const block_scheme_t block_fs_scheme = {
.name = "fs",
- .block = {
- .type = BLOCK_TEXT,
- .update_interval = {
- .tv_sec = 20,
- .tv_nsec = 0,
- },
- .update_fn = block_fs_update,
- .clean_fn = block_fs_clean,
- },
- .size = sizeof(block_fs_t),
.entries = block_fs_entries,
- .validate = block_fs_validate,
+ .alloc_fn = block_fs_alloc,
+ .clean_fn = block_fs_clean,
+ .validate_fn = block_fs_validate,
+ .resolve_fn = NULL,
};
diff --git a/src/blocks/group.c b/src/blocks/group.c
index ae8f981..bf377f5 100644
--- a/src/blocks/group.c
+++ b/src/blocks/group.c
@@ -1,4 +1,11 @@
-#include "scheme.h"
+#include "../block.h"
+
+static block_t *block_group_alloc(const block_scheme_t *scheme)
+{
+ block_t *block = calloc(1, sizeof(block_group_t));
+ block->type = BLOCK_GROUP;
+ return block;
+}
static void block_group_clean(block_t *block)
{
@@ -8,12 +15,9 @@ static void block_group_clean(block_t *block)
const block_scheme_t block_group_scheme = {
.name = "group",
- .block = {
- .type = BLOCK_GROUP,
- .clean_fn = block_group_clean,
- },
- .size = sizeof(block_group_t),
.entries = NULL,
- .validate = NULL,
+ .alloc_fn = block_group_alloc,
+ .clean_fn = block_group_clean,
+ .validate_fn = NULL,
+ .resolve_fn = NULL,
};
-
diff --git a/src/blocks/ram.c b/src/blocks/ram.c
index 8c21b21..158583c 100644
--- a/src/blocks/ram.c
+++ b/src/blocks/ram.c
@@ -3,7 +3,7 @@
#include <assert.h>
#include <stdlib.h>
-#include "scheme.h"
+#include "../block.h"
#include "../any_log.h"
@@ -12,6 +12,11 @@ typedef struct {
char *format;
} block_ram_t;
+static const struct timespec block_ram_interval = {
+ .tv_sec = 1,
+ .tv_nsec = 0,
+};
+
static void block_ram_update(block_t *block)
{
FILE *meminfo = fopen("/proc/meminfo", "rb");
@@ -59,6 +64,15 @@ static void block_ram_update(block_t *block)
assert(ram->block.text != NULL);
}
+static block_t *block_ram_alloc(const block_scheme_t *scheme)
+{
+ block_t *block = calloc(1, sizeof(block_ram_t));
+ block->type = BLOCK_TEXT;
+ block->update_interval = block_ram_interval;
+ block->update_fn = block_ram_update;
+ return block;
+}
+
static void block_ram_clean(block_t *block)
{
block_ram_t *ram = (block_ram_t *)block;
@@ -89,16 +103,9 @@ static bool block_ram_validate(block_t *block, const block_scheme_t *scheme)
const block_scheme_t block_ram_scheme = {
.name = "ram",
- .block = {
- .type = BLOCK_TEXT,
- .update_interval = {
- .tv_sec = 1,
- .tv_nsec = 0,
- },
- .update_fn = block_ram_update,
- .clean_fn = block_ram_clean,
- },
- .size = sizeof(block_ram_t),
.entries = NULL,
- .validate = block_ram_validate,
+ .alloc_fn = block_ram_alloc,
+ .clean_fn = block_ram_clean,
+ .validate_fn = block_ram_validate,
+ .resolve_fn = NULL,
};
diff --git a/src/blocks/scheme.c b/src/blocks/scheme.c
deleted file mode 100644
index 75519fc..0000000
--- a/src/blocks/scheme.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "scheme.h"
-
-extern const block_scheme_t block_text_scheme;
-extern const block_scheme_t block_group_scheme;
-extern const block_scheme_t block_ram_scheme;
-extern const block_scheme_t block_fs_scheme;
-extern const block_scheme_t block_date_scheme;
-
-const block_scheme_t *block_schemes[] = {
- &block_text_scheme,
- &block_group_scheme,
- &block_ram_scheme,
- &block_fs_scheme,
- &block_date_scheme,
- NULL,
-};
diff --git a/src/blocks/scheme.h b/src/blocks/scheme.h
deleted file mode 100644
index a3dc9c2..0000000
--- a/src/blocks/scheme.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef COMET_SCHEME_H
-#define COMET_SCHEME_H
-
-#include "../config.h"
-
-typedef struct block_scheme block_scheme_t;
-
-typedef bool (*block_validate_t)(block_t *block, const block_scheme_t *scheme);
-
-struct block_scheme {
- const char *name;
- block_t block;
- size_t size;
- const config_entry_t *entries;
- block_validate_t validate;
-};
-
-extern const block_scheme_t *block_schemes[];
-
-#endif
diff --git a/src/blocks/text.c b/src/blocks/text.c
index 270b197..115beb0 100644
--- a/src/blocks/text.c
+++ b/src/blocks/text.c
@@ -1,7 +1,14 @@
-#include "scheme.h"
+#include "../block.h"
#include "../any_log.h"
+static block_t *block_text_alloc(const block_scheme_t *scheme)
+{
+ block_t *block = calloc(1, sizeof(block_text_t));
+ block->type = BLOCK_TEXT;
+ return block;
+}
+
static void block_text_clean(block_t *block)
{
block_text_t *text = (block_text_t *)block;
@@ -22,11 +29,9 @@ static bool block_text_validate(block_t *block, const block_scheme_t *scheme)
const block_scheme_t block_text_scheme = {
.name = "text",
- .block = {
- .type = BLOCK_TEXT,
- .clean_fn = block_text_clean,
- },
- .size = sizeof(block_text_t),
.entries = NULL,
- .validate = block_text_validate,
+ .alloc_fn = block_text_alloc,
+ .clean_fn = block_text_clean,
+ .validate_fn = block_text_validate,
+ .resolve_fn = NULL,
};