2008-01-26 Bean <bean123ch@gmail.com>
* fs/reiserfs.c (grub_fshelp_node): New member next_offset.
        (grub_reiserfs_get_item): Save offset of the next item.
        (grub_reiserfs_iterate_dir): Use next_offset to find next item.
			
			
This commit is contained in:
		
							parent
							
								
									2a9525e6c3
								
							
						
					
					
						commit
						22da1f6f0f
					
				
					 2 changed files with 17 additions and 4 deletions
				
			
		|  | @ -1,3 +1,9 @@ | |||
| 2008-01-26  Bean  <bean123ch@gmail.com> | ||||
| 
 | ||||
| 	* fs/reiserfs.c (grub_fshelp_node): New member next_offset. | ||||
| 	(grub_reiserfs_get_item): Save offset of the next item. | ||||
| 	(grub_reiserfs_iterate_dir): Use next_offset to find next item. | ||||
| 
 | ||||
| 2008-01-25  Robert Millan  <rmh@aybabtu.com> | ||||
| 
 | ||||
| 	* conf/i386-pc.rmk (grub_setup_SOURCES, grub_emu_SOURCES): Regroup to | ||||
|  |  | |||
|  | @ -218,6 +218,7 @@ struct grub_fshelp_node | |||
|   struct grub_reiserfs_data *data; | ||||
|   grub_uint32_t block_number; /* 0 if node is not found.  */ | ||||
|   grub_uint16_t block_position; | ||||
|   grub_uint64_t next_offset; | ||||
|   enum grub_reiserfs_item_type type; /* To know how to read the header.  */ | ||||
|   struct grub_reiserfs_item_header header; | ||||
| }; | ||||
|  | @ -499,6 +500,7 @@ grub_reiserfs_get_item (struct grub_reiserfs_data *data, | |||
|   if (! block_header) | ||||
|     goto fail; | ||||
|    | ||||
|   item->next_offset = 0; | ||||
|   do | ||||
|     { | ||||
|       grub_disk_read (data->disk, | ||||
|  | @ -542,6 +544,9 @@ grub_reiserfs_get_item (struct grub_reiserfs_data *data, | |||
| #endif | ||||
|             } | ||||
|           block_number = grub_le_to_cpu32 (children[i].block_number); | ||||
| 	  if ((i < item_count) && (key->directory_id == keys[i].directory_id) | ||||
| 	       && (key->object_id == keys[i].object_id)) | ||||
| 	    item->next_offset = grub_reiserfs_get_key_offset(&(keys[i])); | ||||
| #ifdef GRUB_REISERFS_DEBUG | ||||
|           if (i == item_count | ||||
|               || grub_reiserfs_compare_keys (key, &(keys[i])) == 0) | ||||
|  | @ -711,6 +716,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; | ||||
|   grub_uint64_t next_offset = item->next_offset; | ||||
|   int ret = 0; | ||||
| 
 | ||||
|   if (item->type != GRUB_REISERFS_DIRECTORY) | ||||
|  | @ -732,7 +738,6 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item, | |||
|       struct grub_fshelp_node directory_item; | ||||
|       grub_uint16_t entry_count, entry_number; | ||||
|       struct grub_reiserfs_item_header *item_headers; | ||||
|       grub_uint64_t key_offset; | ||||
|        | ||||
|       grub_disk_read (data->disk, | ||||
|                       (((grub_disk_addr_t) block_number * block_size) | ||||
|  | @ -940,15 +945,17 @@ grub_reiserfs_iterate_dir (grub_fshelp_node_t item, | |||
|             } | ||||
|         } | ||||
|        | ||||
|       key_offset | ||||
|         = grub_reiserfs_get_key_offset (&(item_headers[block_position].key)); | ||||
|       if (next_offset == 0) | ||||
|         break; | ||||
| 
 | ||||
|       grub_reiserfs_set_key_offset (&(item_headers[block_position].key), | ||||
|                                     key_offset + 1); | ||||
|                                     next_offset); | ||||
|       if (grub_reiserfs_get_item (data, &(item_headers[block_position].key), | ||||
|                                   &directory_item) != GRUB_ERR_NONE) | ||||
|         goto fail; | ||||
|       block_number = directory_item.block_number; | ||||
|       block_position = directory_item.block_position; | ||||
|       next_offset = directory_item.next_offset; | ||||
|     } | ||||
|   while (block_number); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue