]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-01-06 Yoshinori K. Okuji <okuji@enbug.org>
authorokuji <okuji@localhost>
Sun, 6 Jan 2008 22:57:50 +0000 (22:57 +0000)
committerokuji <okuji@localhost>
Sun, 6 Jan 2008 22:57:50 +0000 (22:57 +0000)
    * fs/reiserfs.c (grub_reiserfs_get_key_v2_type): Handle endianness
    correctly.
    (grub_reiserfs_get_key_offset): Likewise.
    (grub_reiserfs_set_key_offset): Likewise.
    (grub_reiserfs_set_key_type): Likewise.
    (grub_reiserfs_iterate_dir): Return 1 if found, otheriwise 0.

    (GRUB_REISERFS_KEYV2_BITFIELD): Undefined. Probably it would be
    better to remove the bitfield version completely.

ChangeLog
fs/reiserfs.c

index 930d1e606483ff2624f2ee605facb60e5715dbb4..b8e6434e1b975dfc67a45d97a37ca8cf4150a60f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2008-01-06  Yoshinori K. Okuji  <okuji@enbug.org>
 
+       * fs/reiserfs.c (grub_reiserfs_get_key_v2_type): Handle endianness
+       correctly.
+       (grub_reiserfs_get_key_offset): Likewise.
+       (grub_reiserfs_set_key_offset): Likewise.
+       (grub_reiserfs_set_key_type): Likewise.
+       (grub_reiserfs_iterate_dir): Return 1 if found, otheriwise 0.
+
+       (GRUB_REISERFS_KEYV2_BITFIELD): Undefined. Probably it would be
+       better to remove the bitfield version completely.
+       
+2008-01-06  Yoshinori K. Okuji  <okuji@enbug.org>
+       
        * fs/reiserfs.c (grub_reiserfs_iterate_dir): ENTRY_ITEM must be
        allocated from the heap, due to the fshelp implementation.
        (grub_reiserfs_dir): Free NODE, due to the same reason.
index 9f777e0b157e8074569269e0f35e486eaf0556ad..b5b32bedca5bd0ebec8b7811d800921367450c5e 100644 (file)
 /*
   TODO:
   implement journal handling (ram replay)
-  implement symlinks support
-  support items bigger than roughly (blocksize / 4) * blocksize
-    !! that goes for directories aswell, size in such case is metadata size.
   test tail packing & direct files
   validate partition label position
 */
 #warning "TODO : journal, tail packing (?)"
 
-#define GRUB_REISERFS_KEYV2_BITFIELD 1
 #if 0
+# define GRUB_REISERFS_KEYV2_BITFIELD 1
 # define GRUB_REISERFS_DEBUG
 # define GRUB_REISERFS_JOURNALING
 # define GRUB_HEXDUMP
@@ -263,7 +260,7 @@ grub_reiserfs_get_key_v2_type (const struct grub_reiserfs_key *key)
 #ifdef GRUB_REISERFS_KEYV2_BITFIELD
   switch (key->u.v2.type)
 #else
-  switch (key->u.v2.offset_type & 0xF)
+  switch (grub_le_to_cpu64 (key->u.v2.offset_type) >> 60)
 #endif
     {
     case 0:
@@ -372,9 +369,7 @@ grub_reiserfs_get_key_offset (const struct grub_reiserfs_key *key)
 #ifdef GRUB_REISERFS_KEYV2_BITFIELD
       return key->u.v2.offset;
 #else
-      grub_uint64_t temp = grub_le_to_cpu64 (key->u.v2.offset_type & ~0xF);
-      return (((temp & 0xF000000000000000LLU) >> 4) \
-              | (temp & 0x00FFFFFFFFFFFFFFLLU));
+      return grub_le_to_cpu64 (key->u.v2.offset_type) & (~0ULL >> 4);
 #endif
     }
 }
@@ -391,9 +386,8 @@ grub_reiserfs_set_key_offset (struct grub_reiserfs_key *key,
     key->u.v2.offset = value;
 #else
     key->u.v2.offset_type \
-      = ((key->u.v2.offset_type & 0xF) \
-         | grub_cpu_to_le64 (((value & 0x0F00000000000000LLU) << 4) \
-                             | (value & 0x00FFFFFFFFFFFFFFLLU));
+      = ((key->u.v2.offset_type & grub_cpu_to_le64 (15ULL << 60))
+         | grub_cpu_to_le64 (value & (~0ULL >> 4)));
 #endif
 }
 
@@ -443,7 +437,9 @@ grub_reiserfs_set_key_type (struct grub_reiserfs_key *key,
 #ifdef GRUB_REISERFS_KEYV2_BITFIELD
       key->u.v2.type = type;
 #else
-      key->u.v2.offset_type = (key->u.v2.offset_type & ~0xF) | (type & 0xF);
+      key->u.v2.offset_type
+        = ((key->u.v2.offset_type & grub_cpu_to_le64 (~0ULL >> 4))
+           | grub_cpu_to_le64 ((grub_uint64_t) type << 60));
 #endif
     }
   assert (grub_reiserfs_get_key_type (key) == grub_type);
@@ -752,6 +748,7 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item,
   struct grub_reiserfs_block_header *block_header = 0;
   grub_uint16_t block_size, block_position;
   grub_uint32_t block_number;
+  int ret = 0;
 
   if (item->type != GRUB_REISERFS_DIRECTORY)
     {
@@ -975,6 +972,7 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item,
                 {
                   grub_dprintf ("reiserfs", "Found : %s, type=%d\n",
                                 entry_name, entry_type);
+                  ret = 1;
                   goto found;
                 }
 
@@ -999,11 +997,11 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item,
  found:
   assert (grub_errno == GRUB_ERR_NONE);
   grub_free (block_header);
-  return grub_errno;
+  return ret;
  fail:
   assert (grub_errno != GRUB_ERR_NONE);
   grub_free (block_header);
-  return grub_errno;
+  return 0;
 }
 
 /****************************************************************************/