]> git.ozlabs.org Git - yaboot.git/blobdiff - second/fs_reiserfs.c
Fix the swab* macros.
[yaboot.git] / second / fs_reiserfs.c
index 238f523e843c848246522e064be08a402c4b6794..a312ced0d9efff213ea18a391e7d812c94690022 100644 (file)
@@ -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;
          }