diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/fileops.c | 26 | ||||
-rw-r--r-- | src/include/fileops.h | 4 | ||||
-rw-r--r-- | src/main.c | 1 |
3 files changed, 30 insertions, 1 deletions
diff --git a/src/fileops.c b/src/fileops.c index ca5171d..e43a455 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -4,6 +4,7 @@ #include <string.h> #include "include/fileops.h" +#include "include/keytab.h" uint8_t *readdb(char *filename) { @@ -26,3 +27,28 @@ uint8_t *readdb(char *filename) 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"); + } +} diff --git a/src/include/fileops.h b/src/include/fileops.h index 63294ea..371f6e8 100644 --- a/src/include/fileops.h +++ b/src/include/fileops.h @@ -1,7 +1,9 @@ #ifndef FILEOPS_H #define FILEOPS_H +#include "keytab.h" + unsigned char *readdb(char *filename); -// TODO: Implement writedb function +void writedb(char *filename, struct keytablist *list, int len); #endif @@ -45,6 +45,7 @@ int main(int argc, char **argv) } } + writedb(filename, list, len); for (int i = 0; i < len; ++i) { int *indexes = getkeys(list, i); for (int j = 0; indexes[j]; ++j) { |