summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fileops.c28
-rw-r--r--src/include/fileops.h6
-rw-r--r--src/main.c24
3 files changed, 58 insertions, 0 deletions
diff --git a/src/fileops.c b/src/fileops.c
new file mode 100644
index 0000000..ca5171d
--- /dev/null
+++ b/src/fileops.c
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+#include "include/fileops.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;
+}
diff --git a/src/include/fileops.h b/src/include/fileops.h
new file mode 100644
index 0000000..2354913
--- /dev/null
+++ b/src/include/fileops.h
@@ -0,0 +1,6 @@
+#ifndef FILEOPS_H
+#define FILEOPS_H
+
+unsigned char *readdb(char *filename);
+
+#endif
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..8e4bab4
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "include/fileops.h"
+
+int main(int argc, char **argv)
+{
+ if (argc != 2)
+ exit(1);
+ char *filename = argv[1];
+
+ uint8_t *buf = readdb(filename);
+ if (buf == NULL)
+ exit(0);
+
+ printf("[ ");
+ for (int i = 0; buf[i]; ++i) {
+ printf("%d ", buf[i]);
+ }
+ printf("]\n");
+ free(buf);
+ exit(0);
+}