confgen

Config parser generator
git clone git://git.finwo.net/app/confgen
Log | Files | Refs | LICENSE

commit 5c16d71ac19bb1734e98575ff17e28f97c09a612
parent 3ad2986ed2a48ccb1443c60ac59d047c898f7943
Author: finwo <finwo@pm.me>
Date:   Wed, 15 Jul 2026 02:47:57 +0200

File reading

Diffstat:
Msrc/main.c | 62++++++++++++++++++++++++++++++++------------------------------
Atemplate/util/buffer.example.c | 41+++++++++++++++++++++++++++++++++++++++++
2 files changed, 73 insertions(+), 30 deletions(-)

diff --git a/src/main.c b/src/main.c @@ -1,40 +1,42 @@ #include <stdlib.h> #include <stdio.h> +#include <string.h> #include "util/buffer.h" -int main() { - - struct confgen_buffer *buf = calloc(1, sizeof(struct confgen_buffer)); - - confgen_buffer_append(buf, "Hello world", 11); - - printf("Stats:\n"); - printf(" alloc: %p\n" , buf->alloc); - printf(" dat : %p\n" , buf->dat); - printf(" len : %ld\n", buf->len); - printf(" cap : %ld\n", buf->cap); - printf(" data : [%*s]\n", (int)(buf->len), buf->dat); - printf("\n"); - - confgen_buffer_append(buf, "™", 3); - - printf("Stats:\n"); - printf(" alloc: %p\n" , buf->alloc); - printf(" dat : %p\n" , buf->dat); - printf(" len : %ld\n", buf->len); - printf(" cap : %ld\n", buf->cap); - printf(" data : [%*s]\n", (int)(buf->len), buf->dat); - printf("\n"); - - confgen_buffer_consume(buf, 6); +int main(int argc, char *argv[]) { + FILE *fp; + size_t n; + + char *infile = "-"; + if (argc > 1) { + infile = argv[1]; + } + + if (!strcmp(infile, "-")) { + fp = stdin; + } else { + fp = fopen(infile, "r"); + } + if (!fp) { + perror("fopen"); + return EXIT_FAILURE; + } + + + struct confgen_buffer *ring = calloc(1, sizeof(struct confgen_buffer)); + char *intermediate = malloc(BUFSIZ); + while(!feof(fp)) { + n = fread(intermediate, 1, BUFSIZ, fp); + confgen_buffer_append(ring, intermediate, n); + } printf("Stats:\n"); - printf(" alloc: %p\n" , buf->alloc); - printf(" dat : %p\n" , buf->dat); - printf(" len : %ld\n", buf->len); - printf(" cap : %ld\n", buf->cap); - printf(" data : [%*s]\n", (int)(buf->len), buf->dat); + printf(" alloc: %p\n" , ring->alloc); + printf(" dat : %p\n" , ring->dat); + printf(" len : %ld\n", ring->len); + printf(" cap : %ld\n", ring->cap); + printf(" data : [%*s]\n", (int)(ring->len), ring->dat); printf("\n"); return 0; diff --git a/template/util/buffer.example.c b/template/util/buffer.example.c @@ -0,0 +1,41 @@ +#include <stdlib.h> +#include <stdio.h> + +#include "buffer.h" + +int main() { + + struct confgen_buffer *buf = calloc(1, sizeof(struct confgen_buffer)); + + confgen_buffer_append(buf, "Hello world", 11); + + printf("Stats:\n"); + printf(" alloc: %p\n" , buf->alloc); + printf(" dat : %p\n" , buf->dat); + printf(" len : %ld\n", buf->len); + printf(" cap : %ld\n", buf->cap); + printf(" data : [%*s]\n", (int)(buf->len), buf->dat); + printf("\n"); + + confgen_buffer_append(buf, "™", 3); + + printf("Stats:\n"); + printf(" alloc: %p\n" , buf->alloc); + printf(" dat : %p\n" , buf->dat); + printf(" len : %ld\n", buf->len); + printf(" cap : %ld\n", buf->cap); + printf(" data : [%*s]\n", (int)(buf->len), buf->dat); + printf("\n"); + + confgen_buffer_consume(buf, 6); + + printf("Stats:\n"); + printf(" alloc: %p\n" , buf->alloc); + printf(" dat : %p\n" , buf->dat); + printf(" len : %ld\n", buf->len); + printf(" cap : %ld\n", buf->cap); + printf(" data : [%*s]\n", (int)(buf->len), buf->dat); + printf("\n"); + + return 0; +}