util: add the cat function as a utility
[akaros.git] / user / vmm / initrd.c
index d8a7c4b..4d4140d 100644 (file)
 #include <unistd.h>
 #include <fcntl.h>
 #include <err.h>
+#include <vmm/util.h>
 
-/* initrd loads the initrd and returns its place in the world. It has
- * to avoid the already loaded kernel. */
+/* initrd loads the initrd. It is currently just a wrapper for cat,
+ * but we leave it here in case we need to do more for initrd at
+ * some point. */
 ssize_t setup_initrd(char *filename, void *membase, size_t memsize)
 {
-       int fd;
-       struct stat buf;
-       void *where = membase;
-       int amt;
-       int tot = 0;
-
        if (!filename)
                return 0;
 
-       fd = open(filename, O_RDONLY);
-       if (fd < 0) {
-               fprintf(stderr, "Can't open %s: %r\n", filename);
-               return 0;
-       }
-
-       if (fstat(fd, &buf) < 0) {
-               fprintf(stderr, "Can't stat %s: %r\n", filename);
-               close(fd);
-               return 0;
-       }
-
-       if (buf.st_size > memsize) {
-               fprintf(stderr,
-                       "file is %d bytes, but we only have %d bytes to place it\n",
-                       buf.st_size, memsize);
-               close(fd);
-               return 0;
-       }
-
-       while (tot < buf.st_size) {
-               amt = read(fd, where, buf.st_size - tot);
-               if (amt < 0) {
-                       tot = 0;
-                       break;
-               }
-               where += amt;
-               tot += amt;
-       }
-
-       close(fd);
-       return tot;
+       return cat(filename, membase, memsize);
 }