X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=second%2Ffs_reiserfs.c;h=a312ced0d9efff213ea18a391e7d812c94690022;hb=e915b0ad8c6b5a2fa25c59bd56ae752f8c2c799d;hp=238f523e843c848246522e064be08a402c4b6794;hpb=082b8310e3f92ea8da0b7011549bd86c9fd4ce95;p=yaboot.git diff --git a/second/fs_reiserfs.c b/second/fs_reiserfs.c index 238f523..a312ced 100644 --- a/second/fs_reiserfs.c +++ b/second/fs_reiserfs.c @@ -33,8 +33,8 @@ #include "reiserfs/reiserfs.h" /* Exported in struct fs_t */ -static int reiserfs_open( struct boot_file_t *file, const char *dev_name, - struct partition_t *part, const char *file_name ); +static int reiserfs_open( struct boot_file_t *file, struct partition_t *part, + struct boot_fspec_t *fspec); static int reiserfs_read( struct boot_file_t *file, unsigned int size, void *buffer ); @@ -63,10 +63,12 @@ int errnum; static int -reiserfs_open( struct boot_file_t *file, const char *dev_name, - struct partition_t *part, const char *file_name ) +reiserfs_open( struct boot_file_t *file, struct partition_t *part, + struct boot_fspec_t *fspec) { static char buffer[1024]; + char *dev_name = fspec->dev; + char *file_name = fspec->file; DEBUG_ENTER; DEBUG_OPEN; @@ -74,7 +76,7 @@ reiserfs_open( struct boot_file_t *file, const char *dev_name, memset( INFO, 0, sizeof(struct reiserfs_state) ); INFO->file = file; - if (part) + if (fspec->part) { DEBUG_F( "Determining offset for partition %d\n", part->part_number ); INFO->partition_offset = ((uint64_t)part->part_start) * part->blocksize; @@ -154,7 +156,7 @@ reiserfs_close( struct boot_file_t *file ) static __inline__ __u32 -log2( __u32 word ) +reiserfs_log2( __u32 word ) { int i = 0; while( word && (word & (1 << ++i)) == 0 ); @@ -211,12 +213,12 @@ block_read( __u32 blockNr, __u32 start, __u32 len, char *buffer ) while ( transactions-- > 0 ) { int i = 0; - int j_len; + int j_len = 0; if ( *journal_table != 0xffffffff ) { /* Search for the blockNr in cached journal */ - j_len = le32_to_cpu(*journal_table++); + j_len = le32_to_cpu((*journal_table)++); while ( i++ < j_len ) { if ( le32_to_cpu(*journal_table++) == blockNr ) @@ -426,7 +428,7 @@ reiserfs_read_super( void ) INFO->version = le16_to_cpu(super.s_version); INFO->blocksize = le16_to_cpu(super.s_blocksize); - INFO->blocksize_shift = log2( INFO->blocksize ); + INFO->blocksize_shift = reiserfs_log2( INFO->blocksize ); INFO->journal_block = le32_to_cpu(super.s_journal_block); INFO->journal_block_count = le32_to_cpu(super.s_orig_journal_size); @@ -616,7 +618,10 @@ next_key( void ) cache = CACHE( depth ); else { - cache = read_tree_node( INFO->blocks[depth], --depth ); + /* Save depth as using it twice as args to read_tree_node() + * has undefined behaviour */ + __u16 d = depth; + cache = read_tree_node( INFO->blocks[d], --depth ); if ( !cache ) return 0; }