Make it compile
diff --git a/default.gpr b/default.gpr
index 7437fd5..96aed41 100644
--- a/default.gpr
+++ b/default.gpr
@@ -1,6 +1,6 @@
 project Default is
-
-   for Main use ("main");
+   for Languages use ("ada", "c");
+   for Main use ("main.c");
    for Source_Dirs use ("src");
 
    package Builder is
diff --git a/default.nix b/default.nix
index 6cb0bac..0ce641b 100644
--- a/default.nix
+++ b/default.nix
@@ -11,6 +11,7 @@
     gprbuild
     spark2014
     z3
+    cppcheck
   ];
 
   gprFile = "default.gpr";
diff --git a/src/fs.c b/src/blockdev.c
similarity index 64%
rename from src/fs.c
rename to src/blockdev.c
index 271662a..443efcd 100644
--- a/src/fs.c
+++ b/src/blockdev.c
@@ -1,9 +1,9 @@
 
 #include <stdio.h>
 
-#include "fs.h"
+#include "blockdev.h"
 
-FILE* block_device = NULL
+FILE* block_device = NULL;
 size_t device_size = 0;
 
 
@@ -13,15 +13,17 @@
 	if (!block_device) {
 		return 0;
 	}
-	fseek(block_device, 0, SEEK_END)
+	fseek(block_device, 0, SEEK_END);
+	device_size = ftell(block_device);
 	return 1;
 }
 
 
 void devclose(void)
 {
-	if (block_device)
+	if (block_device) {
 		fclose(block_device);
+	}
 	block_device = NULL;
 	device_size = 0;
 }
@@ -29,19 +31,22 @@
 int devread(unsigned long sector, unsigned long byte_offset, unsigned long byte_len, void *buf)
 {
 	if (!block_device) {
-		fprintf(stdcerr, "devread: Device not open.\n");
+		fprintf(stderr, "devread: Device not open.\n");
 		return 0;
 	}
 
 	const unsigned long offset = sector * 512 + byte_offset;
-	if (offset + byte_len > device_size)
-		fprintf(stdcerr, "devread: Attempt to read beyond device.\n");
+	if (offset + byte_len > device_size) {
+		fprintf(stderr, "devread: Attempt to read beyond device.\n");
 		return 0;
 	}
 
-	if fseek(block_device, sector * 512 + byte_offset, SEEK_SET);
+	if (fseek(block_device, sector * 512 + byte_offset, SEEK_SET) != 0) {
+		fprintf(stderr, "devread: Failed to set offset on device.\n");
+		return 0;
+	}
 	if (fread(buf, byte_len, 1, block_device) != byte_len) {
-		fprintf(stdcerr, "devread: Failed to read from device.\n");
+		fprintf(stderr, "devread: Failed to read from device.\n");
 		return 0;
 	}
 	return 1;
@@ -58,5 +63,3 @@
 //unsigned long file_size(void);
 //void file_set_size(unsigned long size);
 //void file_close(void);
-
-#endif /* FS_H */
diff --git a/src/blockdev.h b/src/blockdev.h
new file mode 100644
index 0000000..77256aa
--- /dev/null
+++ b/src/blockdev.h
@@ -0,0 +1,36 @@
+#ifndef BLOCKDEV_H
+#define BLOCKDEV_H
+
+/** devopen
+ * @param name    Filename to be used as blockdevice
+ * @param reopen  Unused, set NULL
+ * @return        1 on success, 0 on failure !CAUTION
+ */
+int devopen(const char *name, int *reopen);
+
+/** devclose
+ */
+void devclose(void);
+
+/** devread
+ * @param sector       512 byte sector of the block device
+ * @param byte_offset  Offset in the block
+ * @param byte_len     Buffer length
+ * @param buf          Buffer
+ * @return             1 on sucess, 0 on failure !CAUTION
+ */
+int devread(unsigned long sector, unsigned long byte_offset,
+	unsigned long byte_len, void *buf);
+
+
+//void dev_set_partition(unsigned long start, unsigned long size);
+//void dev_get_partition(unsigned long *start, unsigned long *size);
+
+//int file_open(const char *filename);
+//int file_read(void *buf, unsigned long len);
+//unsigned long file_seek(unsigned long offset);
+//unsigned long file_size(void);
+//void file_set_size(unsigned long size);
+//void file_close(void);
+
+#endif /* BLOCKDEV_H */
diff --git a/src/fs-filo.adb b/src/fs-filo.adb
index 3280b34..591f321 100644
--- a/src/fs-filo.adb
+++ b/src/fs-filo.adb
@@ -1,21 +1,19 @@
 package body FS.FILO is
 
    procedure Read
-      (Buffer    : in out Buffer_Type;
-       Offset    : in     Natural;
-       Bytes_Read:    out Natural)
+      (Buffer  : in out Buffer_Type;
+       Offset  : in     Natural;
+       Success :    out Boolean)
    is
-      Sector_Size : constant Natural := 512;
-      Sector      : constant Interfaces.C.unsigned_long := Offset / Sector_Size;
-      Byte_Offset : constant Interfaces.C.unsigned_long := Offset rem Sector_Size;
-      Byte_Len    : constant Interfaces.C.unsigned_long := Buffer'Length;
+      --Sector_Size : constant Natural := 512;
+      --Sector      : constant Interfaces.C.unsigned_long := Offset / Sector_Size;
+      --Byte_Offset : constant Interfaces.C.unsigned_long := Offset rem Sector_Size;
+      --Byte_Len    : constant Interfaces.C.unsigned_long := Buffer'Length;
+      --function To_Bool(Item : Interfaces.C.int) return Bool is
+      --   (if Item = 0 then False else True);
    begin
-
-      Bytes_Read := C_devread
-         (sector => Sector,
-          byte_offset => Byte_Offset,
-          byte_len => Byte_Len,
-          buf => Buffer'Address);
+      null;
+      --Success := To_Bool (C_devread (Sector, Byte_Offset, Byte_Len, Buffer'Address));
    end Read;
 
 end FS.FILO;
diff --git a/src/fs-filo.ads b/src/fs-filo.ads
index 43b6cef..12132e3 100644
--- a/src/fs-filo.ads
+++ b/src/fs-filo.ads
@@ -1,4 +1,5 @@
 with Interfaces.C;
+with System;
 
 package FS.FILO is
 
@@ -13,12 +14,13 @@
       (sector : Interfaces.C.unsigned_long;
        byte_offset : Interfaces.C.unsigned_long;
        byte_len : Interfaces.C.unsigned_long;
-       buf : ... )
+       buf : System.Address)
       return Interfaces.C.int
       with
          SPARK_Mode => Off,
          Import => True,
-         Conversion => C;
+         Convention => C,
+         External_Name => "devopen";
    
 
 end FS.FILO;
diff --git a/src/fs.ads b/src/fs.ads
index 3ea5a69..4591a8a 100644
--- a/src/fs.ads
+++ b/src/fs.ads
@@ -1,5 +1,7 @@
+with Interfaces;
+
 package FS is
 
-   type Buffer is array (Natural range <>) of Unsigned_8;
+   type Buffer_Type is array (Natural range <>) of Interfaces.Unsigned_8;
 
 end FS;
diff --git a/src/fs.h b/src/fs.h
deleted file mode 100644
index cf7f003..0000000
--- a/src/fs.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef FS_H
-#define FS_H
-
-/** devopen
- * @param name    Filename to be used as blockdevice
- * @param reopen  Unused, set NULL
- * @return        1 on success, 0 on failure !CAUTION
- */
-int devopen(const char *name, int *reopen);
-
-/** devclose
- */
-void devclose(void);
-
-/** devread
- * @param sector       512 byte sector of the block device
- * @param byte_offset  Offset in the block
- * @param byte_len     Buffer length
- * @param buf          Buffer
- * @return             1 on sucess, 0 on failure !CAUTION
- */
-int devread(unsigned long sector, unsigned long byte_offset,
-	unsigned long byte_len, void *buf);
-
-
-
-
-
-void dev_set_partition(unsigned long start, unsigned long size);
-void dev_get_partition(unsigned long *start, unsigned long *size);
-
-int file_open(const char *filename);
-int file_read(void *buf, unsigned long len);
-unsigned long file_seek(unsigned long offset);
-unsigned long file_size(void);
-void file_set_size(unsigned long size);
-void file_close(void);
-
-#endif /* FS_H */
diff --git a/src/main.c b/src/main.c
index 91a40d7..5468842 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,15 +1,17 @@
 #include <stdio.h>
 
+#include "blockdev.h"
+
 
 int main(int argc, char* argv[])
 {
 	if (argc != 2) {
-		fprintf(stdcerr, "Use %s /path/to/filesystem\n", argv[0]);
+		fprintf(stderr, "Use %s /path/to/filesystem\n", argv[0]);
 		return -1;
 	}
 
 	if (devopen(argv[1], NULL) != 1) {
-		fprintf(stdcerr, "Faild to open %s\n", argv[1]);
+		fprintf(stderr, "Faild to open %s\n", argv[1]);
 		return -1;
 	}