diff options
Diffstat (limited to 'qemu/roms/openbios/fs/ext2/ext2_mount.c')
-rw-r--r-- | qemu/roms/openbios/fs/ext2/ext2_mount.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/qemu/roms/openbios/fs/ext2/ext2_mount.c b/qemu/roms/openbios/fs/ext2/ext2_mount.c new file mode 100644 index 000000000..06b63deca --- /dev/null +++ b/qemu/roms/openbios/fs/ext2/ext2_mount.c @@ -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; +} |