1 /* Subpart directory header version 2 support */
2 /* SPDX-License-Identifier: GPL-2.0-only */
6 #include "cse_serger.h"
9 uint32_t signature
; /* SUBPART_SIGNATURE */
11 uint8_t hdr_version
; /* Header version = 2 */
12 uint8_t entry_version
; /* Entry version = 1 */
19 static subpart_hdr_ptr
subpart_hdr_read(struct buffer
*buff
)
21 struct subpart_hdr
*hdr
= malloc(sizeof(*hdr
));
26 READ_MEMBER(buff
, hdr
->signature
);
27 READ_MEMBER(buff
, hdr
->count
);
28 READ_MEMBER(buff
, hdr
->hdr_version
);
29 READ_MEMBER(buff
, hdr
->entry_version
);
30 READ_MEMBER(buff
, hdr
->length
);
31 READ_MEMBER(buff
, hdr
->reserved
);
32 READ_MEMBER(buff
, hdr
->name
);
33 READ_MEMBER(buff
, hdr
->checksum
);
38 static void subpart_hdr_print(const subpart_hdr_ptr ptr
)
40 const struct subpart_hdr
*hdr
= ptr
;
42 printf("%-25s %.4s\n", "Signature", (const char *)&hdr
->signature
);
43 printf("%-25s %-25d\n", "Count", hdr
->count
);
44 printf("%-25s %-25d\n", "Header Version", hdr
->hdr_version
);
45 printf("%-25s %-25d\n", "Entry Version", hdr
->entry_version
);
46 printf("%-25s 0x%-23x\n", "Header Length", hdr
->length
);
47 printf("%-25s 0x%-23x\n", "Reserved", hdr
->reserved
);
48 printf("%-25s ", "Name");
49 for (size_t i
= 0; i
< sizeof(hdr
->name
); i
++)
50 printf("%c", hdr
->name
[i
]);
52 printf("%-25s 0x%-23x\n", "Checksum", hdr
->checksum
);
55 static size_t subpart_get_count(const subpart_hdr_ptr ptr
)
57 const struct subpart_hdr
*hdr
= ptr
;
62 static void subpart_hdr_free(subpart_hdr_ptr ptr
)
67 const struct subpart_hdr_ops subpart_hdr_2_ops
= {
68 .read
= subpart_hdr_read
,
69 .print
= subpart_hdr_print
,
70 .get_entry_count
= subpart_get_count
,
71 .free
= subpart_hdr_free
,