1 /*
2  *
3  * (c) 2008-2009 Laurent Vivier <Laurent@lvivier.info>
4  *
5  * This file has been copied from EMILE, http://emile.sf.net
6  *
7  */
8 
9 #include "libext2.h"
10 #include "ext2.h"
11 #include "ext2_utils.h"
12 
13 #define SB_OFFSET (2)
14 
ext2_mount(int fd)15 ext2_VOLUME* ext2_mount(int fd)
16 {
17 	ext2_VOLUME *volume;
18 	struct ext2_super_block *super;
19 	char *buffer;
20 
21 	super = (struct ext2_super_block*)malloc(sizeof(struct ext2_super_block));
22 	if (super == NULL)
23 		return NULL;
24 
25 	ext2_get_super(fd, super);
26 	if (super->s_magic != EXT2_SUPER_MAGIC) {
27 		free(super);
28 		return NULL;
29 	}
30 
31 	buffer = (char*)malloc(EXT2_BLOCK_SIZE(super));
32 	if (buffer == NULL) {
33 		free(super);
34 		return NULL;
35 	}
36 
37 	volume = (ext2_VOLUME*)malloc(sizeof(ext2_VOLUME));
38 	if (volume == NULL) {
39 		free(super);
40 		free(buffer);
41 		return NULL;
42 	}
43 
44 	volume->buffer = buffer;
45 	volume->fd = fd;
46 	volume->super = super;
47 
48 	volume->current = -1;
49 	ext2_read_block(volume, 0);
50 
51 	return volume;
52 }
53 
ext2_umount(ext2_VOLUME * volume)54 int ext2_umount(ext2_VOLUME* volume)
55 {
56 	if (volume == NULL)
57 		return -1;
58 	free(volume->super);
59 	free(volume->buffer);
60 	free(volume);
61 	return 0;
62 }
63