Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / fs / ext2 / ext2_mount.c
diff --git a/qemu/roms/openbios/fs/ext2/ext2_mount.c b/qemu/roms/openbios/fs/ext2/ext2_mount.c
new file mode 100644 (file)
index 0000000..06b63de
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ *
+ * (c) 2008-2009 Laurent Vivier <Laurent@lvivier.info>
+ *
+ * This file has been copied from EMILE, http://emile.sf.net
+ *
+ */
+
+#include "libext2.h"
+#include "ext2.h"
+#include "ext2_utils.h"
+
+#define SB_OFFSET (2)
+
+ext2_VOLUME* ext2_mount(int fd)
+{
+       ext2_VOLUME *volume;
+       struct ext2_super_block *super;
+       char *buffer;
+
+       super = (struct ext2_super_block*)malloc(sizeof(struct ext2_super_block));
+       if (super == NULL)
+               return NULL;
+
+       ext2_get_super(fd, super);
+       if (super->s_magic != EXT2_SUPER_MAGIC) {
+               free(super);
+               return NULL;
+       }
+
+       buffer = (char*)malloc(EXT2_BLOCK_SIZE(super));
+       if (buffer == NULL) {
+               free(super);
+               return NULL;
+       }
+
+       volume = (ext2_VOLUME*)malloc(sizeof(ext2_VOLUME));
+       if (volume == NULL) {
+               free(super);
+               free(buffer);
+               return NULL;
+       }
+
+       volume->buffer = buffer;
+       volume->fd = fd;
+       volume->super = super;
+
+       volume->current = -1;
+       ext2_read_block(volume, 0);
+
+       return volume;
+}
+
+int ext2_umount(ext2_VOLUME* volume)
+{
+       if (volume == NULL)
+               return -1;
+       free(volume->super);
+       free(volume->buffer);
+       free(volume);
+       return 0;
+}