commit 5c16d71ac19bb1734e98575ff17e28f97c09a612
parent 3ad2986ed2a48ccb1443c60ac59d047c898f7943
Author: finwo <finwo@pm.me>
Date: Wed, 15 Jul 2026 02:47:57 +0200
File reading
Diffstat:
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;
+}