Changeset 8bd5dad in mainline


Ignore:
Timestamp:
2011-02-13T21:20:21Z (13 years ago)
Author:
Martin Sucha <sucha14@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c00e729
Parents:
566c401
Message:

Initialize libext2 in ext2info & fixed some bugs in libext2

Location:
uspace
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/ext2info/ext2info.c

    r566c401 r8bd5dad  
    6060        char *dev_path;
    6161        devmap_handle_t handle;
    62         ext2_superblock_t *superblock;
     62        ext2_filesystem_t filesystem;
    6363       
    6464        uint16_t magic;
     
    8686        }
    8787
    88         rc = block_init(handle, 2048);
     88        rc = ext2_filesystem_init(&filesystem, handle);
    8989        if (rc != EOK)  {
    90                 printf(NAME ": Error initializing libblock.\n");
    91                 return 2;
    92         }
    93 
    94         rc = ext2_superblock_read_direct(handle, &superblock);
    95         if (rc != EOK)  {
    96                 printf(NAME ": Error reading superblock.\n");
     90                printf(NAME ": Error initializing libext2.\n");
    9791                return 3;
    9892        }
    9993       
    10094        printf("Superblock:\n");
    101         magic = ext2_superblock_get_magic(superblock);
     95        magic = ext2_superblock_get_magic(filesystem.superblock);
    10296        if (magic == EXT2_SUPERBLOCK_MAGIC) {
    10397                printf("  Magic value: %X (correct)\n", magic);
     
    106100                printf("  Magic value: %X (incorrect)\n", magic);
    107101        }
    108        
    109        
    110         free(superblock);
    111102
    112         block_fini(handle);
     103        ext2_filesystem_fini(&filesystem);
    113104
    114105        return 0;
  • uspace/lib/ext2/Makefile

    r566c401 r8bd5dad  
    3232LIBRARY = libext2
    3333EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX)
     34LIBS = $(LIBBLOCK_PREFIX)/libblock.a
    3435
    3536SOURCES = \
  • uspace/lib/ext2/libext2.h

    r566c401 r8bd5dad  
    6767#define EXT2_SUPERBLOCK_LAST_BYTE       (EXT2_SUPERBLOCK_OFFSET + \
    6868                                                                         EXT2_SUPERBLOCK_SIZE -1)
     69// allow maximum this block size
     70#define EXT2_MAX_BLOCK_SIZE                     8096
    6971
    7072inline uint16_t ext2_superblock_get_magic(ext2_superblock_t *);
  • uspace/lib/ext2/libext2_filesystem.c

    r566c401 r8bd5dad  
    4444 * initializes libblock cache with appropriate logical block size.
    4545 *
    46  * @param fs Pointer to ext2_filesystem_t to initialize
    47  * @param devmap_handle Device handle of the block device
     46 * @param fs                    Pointer to ext2_filesystem_t to initialize
     47 * @param devmap_handle Device handle of the block device
    4848 */
    4949int ext2_filesystem_init(ext2_filesystem_t *fs, devmap_handle_t devmap_handle)
     
    5151        int rc;
    5252        ext2_superblock_t *temp_superblock;
     53        size_t block_size;
    5354       
    5455        fs->device = devmap_handle;
     
    6566        }
    6667       
    67         free(temp_superblock);
     68        block_size = ext2_superblock_get_block_size(temp_superblock);
     69       
     70        if (block_size > EXT2_MAX_BLOCK_SIZE) {
     71                block_fini(fs->device);
     72                return ENOTSUP;
     73        }
     74       
     75        rc = block_cache_init(devmap_handle, block_size, 0, CACHE_MODE_WT);
     76        if (rc != EOK) {
     77                block_fini(fs->device);
     78                return rc;
     79        }
     80       
     81        fs->superblock = temp_superblock;
    6882       
    6983        return EOK;
     
    7791void ext2_filesystem_fini(ext2_filesystem_t *fs)
    7892{
     93        free(fs->superblock);
    7994        block_fini(fs->device);
    8095}
  • uspace/lib/ext2/libext2_superblock.c

    r566c401 r8bd5dad  
    7979inline uint32_t ext2_superblock_get_block_size(ext2_superblock_t *sb)
    8080{
    81         return 1024 << ext2_superblock_get_block_size(sb);
     81        return 1024 << ext2_superblock_get_block_size_log2(sb);
    8282}
    8383
Note: See TracChangeset for help on using the changeset viewer.