]> git.ipfire.org Git - oddments/collecty.git/commitdiff
file: Implement path formatting into the quick read function
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 26 Oct 2025 17:42:46 +0000 (17:42 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 26 Oct 2025 17:42:46 +0000 (17:42 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/daemon/file.c
src/daemon/file.h
src/daemon/sources/conntrack.c

index b8d2082ee3ae7dc96f2f41aee6d6fa522245ad6f..3283a3907f53c1d7f4c022ace8228f41cf8d87b4 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <assert.h>
 #include <errno.h>
+#include <limits.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -316,10 +317,21 @@ int td_file_parse_json(td_file* self, sd_json_variant** ret, sd_json_parse_flags
        return 0;
 }
 
-int td_read_uint64(td_ctx* ctx, const char* path, uint64_t* number) {
+int td_read_uint64(td_ctx* ctx, uint64_t* number, const char* format, ...) {
        td_file* file = NULL;
+       char path[PATH_MAX];
+       va_list args;
        int r;
 
+       // Format the path
+       va_start(args, format);
+       r = td_string_vformat(path, format, args);
+       va_end(args);
+
+       // Handle formatting errors
+       if (r < 0)
+               goto ERROR;
+
        // Open the file
        r = td_file_open_path(&file, ctx, path);
        if (r < 0)
index 7f046599e5de3bbe9aaee593c722cc1e3c2b8258..5bb4ef91143cd9ffe04436d3f404fab2a31e4969 100644 (file)
@@ -77,7 +77,8 @@ int td_file_parse_json(td_file* self, sd_json_variant** json, sd_json_parse_flag
 
 // Shorthands
 
-int td_read_uint64(td_ctx* ctx, const char* path, uint64_t* number);
+int td_read_uint64(td_ctx* ctx, uint64_t* number, const char* format, ...)
+        __attribute__((format(printf, 3, 4)));
 int td_parse(td_ctx* ctx, const char* path, td_file_parser* parser);
 
 #endif /* TELEMETRY_FILE_H */
index 8a8b470df8f9d547f26ad77fd8b73cf5bc5d22c9..2cc4bbe51a16485a78b8464ed187646ce8615a56 100644 (file)
@@ -31,7 +31,7 @@ static int conntrack_heartbeat(td_ctx* ctx, td_source* source) {
        int r;
 
        // Read the total number of connections
-       r = td_read_uint64(ctx, "/proc/sys/net/netfilter/nf_conntrack_count", &count);
+       r = td_read_uint64(ctx, &count, "/proc/sys/net/netfilter/nf_conntrack_count");
        if (r < 0) {
                ERROR(ctx, "Failed to read %s: %s\n",
                                "/proc/sys/net/netfilter/nf_conntrack_count", strerror(-r));
@@ -39,7 +39,7 @@ static int conntrack_heartbeat(td_ctx* ctx, td_source* source) {
        }
 
        // Read the maximum number of connections
-       r = td_read_uint64(ctx, "/proc/sys/net/netfilter/nf_conntrack_max", &max);
+       r = td_read_uint64(ctx, &max, "/proc/sys/net/netfilter/nf_conntrack_max");
        if (r < 0) {
                ERROR(ctx, "Failed to read %s: %s\n",
                                "/proc/sys/net/netfilter/nf_conntrack_max", strerror(-r));