summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorDavid Gibson <dgibson@sneetch.(none)>2005-06-16 17:04:00 +1000
committerDavid Gibson <dgibson@sneetch.(none)>2005-06-16 17:04:00 +1000
commit81f2e89c7551ef44a6203ab1cbb8228d09202572 (patch)
tree0c432178b62793f65dcf90f3be0580e439e4a35a /data.c
parent4102d840d993e7cce7d5c5aea8ef696dc81236fc (diff)
downloaddtc-81f2e89c7551ef44a6203ab1cbb8228d09202572.tar.gz
Rudimentary phandle reference support.
Diffstat (limited to 'data.c')
-rw-r--r--data.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/data.c b/data.c
index aef8c36..3c7de18 100644
--- a/data.c
+++ b/data.c
@@ -38,8 +38,25 @@ struct data data_ref_string(char *str)
}
#endif
+void fixup_free(struct fixup *f)
+{
+ free(f->ref);
+ free(f);
+}
+
void data_free(struct data d)
{
+ struct fixup *f;
+
+ f = d.refs;
+ while (f) {
+ struct fixup *nf;
+
+ nf = f->next;
+ fixup_free(f);
+ f = nf;
+ }
+
assert(!d.val || d.asize);
if (d.val)
@@ -65,6 +82,7 @@ struct data data_grow_for(struct data d, int xlen)
nd.asize = newsize;
nd.val = xrealloc(d.val, newsize);
nd.len = d.len;
+ nd.refs = d.refs;
assert(nd.asize >= (d.len + xlen));
@@ -231,6 +249,22 @@ struct data data_append_align(struct data d, int align)
return data_append_zeroes(d, newlen - d.len);
}
+struct data data_add_fixup(struct data d, char *ref)
+{
+ struct fixup *f;
+ struct data nd;
+
+ f = xmalloc(sizeof(*f));
+ f->offset = d.len;
+ f->ref = ref;
+ f->next = d.refs;
+
+ nd = d;
+ nd.refs = f;
+
+ return nd;
+}
+
int data_is_one_string(struct data d)
{
int i;