|
|
1.1 ! root 1: /* ! 2: * ! 3: * (c) 2008-2009 Laurent Vivier <[email protected]> ! 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: ! 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: ! 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.