summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fileops.c26
-rw-r--r--src/include/fileops.h4
-rw-r--r--src/main.c1
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
diff --git a/src/main.c b/src/main.c
index 9c71bc7..8bf5319 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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) {