* details.
*
* You should have received a copy of the GNU Lesser General Public License
- * along with this file; if not, see http://www.gnu.org/licenses/.
+ * along with this file; if not, see https://www.gnu.org/licenses/.
*/
#ifdef HAVE_CONFIG_H
le32 total_hbin_size; /* Total size of all hbins */
le32 f3[1013];
u8 hbin_area[0]; /* Start of hbin area */
-} _packed_attribute;
+} __attribute__((packed));
/* Cell header */
/* Magic characters which identify the cell type */
le16 magic;
-} _packed_attribute;
+} __attribute__((packed));
/* NK cell - represents a registry key */
struct nk {
le16 name_size;
le16 unknown_0x4E;
char name[0];
-} _packed_attribute;
+} __attribute__((packed));
/* Subkey list cell. There are four types. LF, LH, and LI cells reference
* subkey NK cells directly, while RI cells reference other subkey lists. All
struct cell base;
le16 num_offsets;
le32 elements[0];
-} _packed_attribute;
+} __attribute__((packed));
/* Value list cell - contains a list of value references */
struct value_list {
le32 size;
le32 vk_offsets[0];
-} _packed_attribute;
+} __attribute__((packed));
/* VK cell - contains a value's data, or a reference to it */
struct vk {
unsigned num_offsets;
size_t extra_size;
unsigned increment;
- const le32 *p;
+ size_t i = 0;
enum hive_status status;
if (stats->levels_remaining == 0 || stats->subkey_lists_remaining == 0)
sizeof(struct subkey_list) + extra_size))
return HIVE_CORRUPT;
- p = list->elements;
-
switch (list->base.magic) {
case LF_MAGIC:
case LH_MAGIC:
while (num_offsets--) {
const struct nk *sub_nk;
- sub_nk = get_cell_pointer(regf, *p, sizeof(struct nk));
+ sub_nk = get_cell_pointer(regf, list->elements[i],
+ sizeof(struct nk));
if (!sub_nk || sub_nk->base.magic != NK_MAGIC)
return HIVE_CORRUPT;
- if (!revalidate_cell(regf, *p, sizeof(struct nk) +
+ if (!revalidate_cell(regf, list->elements[i],
+ sizeof(struct nk) +
le16_to_cpu(sub_nk->name_size)))
return HIVE_CORRUPT;
status = (*cb)(sub_nk, cb_ctx);
if (status != HIVE_OK)
return status;
- p += increment;
+ i += increment;
}
return HIVE_OK;
case RI_MAGIC:
status = HIVE_OK;
stats->levels_remaining--;
while (num_offsets--) {
- status = iterate_subkeys_recursive(regf, *p++,
- cb, cb_ctx, stats);
+ status = iterate_subkeys_recursive(regf,
+ list->elements[i++],
+ cb, cb_ctx, stats);
if (status != HIVE_OK)
break;
}