summaryrefslogtreecommitdiff
path: root/src/file.c
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-03-10 11:15:04 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-03-10 11:15:04 -0400
commit7c8e83f655e41b11e970fd0abad5a96a3fb73e47 (patch)
tree057e9c4dd571a4f6f4738b51d53641fcb20ea4dc /src/file.c
parent9b568eba7d0652e9f9457958f16dc35702c4a950 (diff)
Consolidated each header into single header
Diffstat (limited to 'src/file.c')
-rw-r--r--src/file.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/file.c b/src/file.c
new file mode 100644
index 0000000..ba24ed3
--- /dev/null
+++ b/src/file.c
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "include/mdb.h"
+
+uint8_t *readdb(char *filename)
+{
+ FILE *fp = fopen(filename, "rb");
+ if (fp == NULL)
+ return NULL;
+
+ int len = 10;
+ uint8_t *buf = calloc(len, sizeof(uint8_t));
+ int c, i = 0;
+ while ((c = fgetc(fp)) != EOF) {
+ if (i >= len) {
+ len *= 2;
+ buf = realloc(buf, len * sizeof(uint8_t));
+ memset(buf + i, 0, (len - i) * sizeof(uint8_t));
+ }
+ buf[i++] = c;
+ }
+
+ fclose(fp);
+ return buf;
+}
+
+void writedb(char *filename, struct keytablist *list, int len)
+{
+ FILE *fp = fopen(filename, "wb");
+ for (int i = 0; i < len; ++i) {
+ fprintf(fp, "\xfb");
+ int *indexes = getkeys(list, i);
+ for (int j = 0; indexes[j]; ++j) {
+ fprintf(fp, "\xfa%s:", list[i].tab[indexes[j]].key);
+ switch (list[i].tab[indexes[j]].flag) {
+ case 1:
+ fprintf(fp, "%.2lf", list[i].tab[indexes[j]].v.num);
+ break;
+ case 2:
+ fprintf(fp, "%s", list[i].tab[indexes[j]].v.b == 1 ? "true" : "false");
+ break;
+ case 3:
+ fprintf(fp, "%s", list[i].tab[indexes[j]].v.str);
+ break;
+ }
+ }
+ free(indexes);
+ fprintf(fp, "\xfe");
+ }
+}