dtc: Add data_insert_data function

Add helper function to insert a data struct into another.

Signed-off-by: Ayush Singh <ayush@beagleboard.org>
Message-ID: <20250605-previous-value-v3-2-0983d0733a07@beagleboard.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
main
Ayush Singh 2025-06-05 16:18:07 +05:30 committed by David Gibson
parent 97011d1f4e
commit 84d9dd2fcb
2 changed files with 28 additions and 0 deletions

27
data.c
View File

@ -251,6 +251,33 @@ bool data_is_one_string(struct data d)
return true; return true;
} }


struct data data_insert_data(struct data d, struct marker *m, struct data old)
{
unsigned int offset = m->offset;
struct marker *next = m->next;
struct marker *marker;
struct data new_data;
char *ref;

new_data = data_insert_at_marker(d, m, old.val, old.len);

/* Copy all markers from old value */
marker = old.markers;
for_each_marker(marker) {
ref = NULL;

if (marker->ref)
ref = xstrdup(marker->ref);

m->next = alloc_marker(marker->offset + offset, marker->type,
ref);
m = m->next;
}
m->next = next;

return new_data;
}

struct marker *alloc_marker(unsigned int offset, enum markertype type, struct marker *alloc_marker(unsigned int offset, enum markertype type,
char *ref) char *ref)
{ {

1
dtc.h
View File

@ -182,6 +182,7 @@ struct data data_append_addr(struct data d, uint64_t addr);
struct data data_append_byte(struct data d, uint8_t byte); struct data data_append_byte(struct data d, uint8_t byte);
struct data data_append_zeroes(struct data d, int len); struct data data_append_zeroes(struct data d, int len);
struct data data_append_align(struct data d, int align); struct data data_append_align(struct data d, int align);
struct data data_insert_data(struct data d, struct marker *m, struct data old);


struct marker *alloc_marker(unsigned int offset, enum markertype type, struct marker *alloc_marker(unsigned int offset, enum markertype type,
char *ref); char *ref);