diff options
author | bpc2003 <wpesfriendnva@gmail.com> | 2025-03-10 11:15:04 -0400 |
---|---|---|
committer | bpc2003 <wpesfriendnva@gmail.com> | 2025-03-10 11:15:04 -0400 |
commit | 7c8e83f655e41b11e970fd0abad5a96a3fb73e47 (patch) | |
tree | 057e9c4dd571a4f6f4738b51d53641fcb20ea4dc /src/file.c | |
parent | 9b568eba7d0652e9f9457958f16dc35702c4a950 (diff) |
Consolidated each header into single header
Diffstat (limited to 'src/file.c')
-rw-r--r-- | src/file.c | 53 |
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"); + } +} |