Coverage Report

Created: 2026-01-09 07:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-fdt-struct.c
Line
Count
Source
1
/*
2
 * This file is auto-generated, do not modify!
3
 *
4
 * SPDX-License-Identifier: LGPL-2.1-or-later
5
 */
6
7
#include "config.h"
8
9
#include <glib.h>
10
11
#include "fu-fdt-struct.h"
12
#include "fu-byte-array.h"
13
#include "fu-mem-private.h"
14
#include "fu-string.h"
15
16
#ifdef G_LOG_DOMAIN
17
  #undef G_LOG_DOMAIN
18
#endif
19
0
#define G_LOG_DOMAIN "FuStruct"
20
21
/**
22
 * fu_struct_fdt_ref: (skip):
23
 **/
24
FuStructFdt *
25
fu_struct_fdt_ref(FuStructFdt *st)
26
0
{
27
0
    g_return_val_if_fail(st != NULL, NULL);
28
0
    st->refcount++;
29
0
    return st;
30
0
}
31
/**
32
 * fu_struct_fdt_unref: (skip):
33
 **/
34
void
35
fu_struct_fdt_unref(FuStructFdt *st)
36
193k
{
37
193k
    g_return_if_fail(st != NULL);
38
193k
    if (st->refcount == 0) {
39
0
        g_critical("FuStructFdt refcount already zero");
40
0
        return;
41
0
    }
42
193k
    if (--st->refcount > 0)
43
0
        return;
44
193k
    if (st->buf != NULL)
45
192k
        g_byte_array_unref(st->buf);
46
193k
    g_free(st);
47
193k
}
48
/**
49
 * fu_struct_fdt_new_internal: (skip):
50
 **/
51
static FuStructFdt *
52
fu_struct_fdt_new_internal(void)
53
193k
{
54
193k
    FuStructFdt *st = g_new0(FuStructFdt, 1);
55
193k
    st->refcount = 1;
56
193k
    return st;
57
193k
}
58
59
/* getters */
60
/**
61
 * fu_struct_fdt_get_magic: (skip):
62
 **/
63
static guint32
64
fu_struct_fdt_get_magic(const FuStructFdt *st)
65
361k
{
66
361k
    g_return_val_if_fail(st != NULL, 0x0);
67
361k
    return fu_memread_uint32(st->buf->data + 0, G_BIG_ENDIAN);
68
361k
}
69
/**
70
 * fu_struct_fdt_get_totalsize: (skip):
71
 **/
72
guint32
73
fu_struct_fdt_get_totalsize(const FuStructFdt *st)
74
3.90k
{
75
3.90k
    g_return_val_if_fail(st != NULL, 0x0);
76
3.90k
    return fu_memread_uint32(st->buf->data + 4, G_BIG_ENDIAN);
77
3.90k
}
78
/**
79
 * fu_struct_fdt_get_off_dt_struct: (skip):
80
 **/
81
guint32
82
fu_struct_fdt_get_off_dt_struct(const FuStructFdt *st)
83
3.38k
{
84
3.38k
    g_return_val_if_fail(st != NULL, 0x0);
85
3.38k
    return fu_memread_uint32(st->buf->data + 8, G_BIG_ENDIAN);
86
3.38k
}
87
/**
88
 * fu_struct_fdt_get_off_dt_strings: (skip):
89
 **/
90
guint32
91
fu_struct_fdt_get_off_dt_strings(const FuStructFdt *st)
92
3.54k
{
93
3.54k
    g_return_val_if_fail(st != NULL, 0x0);
94
3.54k
    return fu_memread_uint32(st->buf->data + 12, G_BIG_ENDIAN);
95
3.54k
}
96
/**
97
 * fu_struct_fdt_get_off_mem_rsvmap: (skip):
98
 **/
99
guint32
100
fu_struct_fdt_get_off_mem_rsvmap(const FuStructFdt *st)
101
3.84k
{
102
3.84k
    g_return_val_if_fail(st != NULL, 0x0);
103
3.84k
    return fu_memread_uint32(st->buf->data + 16, G_BIG_ENDIAN);
104
3.84k
}
105
/**
106
 * fu_struct_fdt_get_version: (skip):
107
 **/
108
guint32
109
fu_struct_fdt_get_version(const FuStructFdt *st)
110
3.56k
{
111
3.56k
    g_return_val_if_fail(st != NULL, 0x0);
112
3.56k
    return fu_memread_uint32(st->buf->data + 20, G_BIG_ENDIAN);
113
3.56k
}
114
/**
115
 * fu_struct_fdt_get_last_comp_version: (skip):
116
 **/
117
guint32
118
fu_struct_fdt_get_last_comp_version(const FuStructFdt *st)
119
3.61k
{
120
3.61k
    g_return_val_if_fail(st != NULL, 0x0);
121
3.61k
    return fu_memread_uint32(st->buf->data + 24, G_BIG_ENDIAN);
122
3.61k
}
123
/**
124
 * fu_struct_fdt_get_boot_cpuid_phys: (skip):
125
 **/
126
guint32
127
fu_struct_fdt_get_boot_cpuid_phys(const FuStructFdt *st)
128
3.84k
{
129
3.84k
    g_return_val_if_fail(st != NULL, 0x0);
130
3.84k
    return fu_memread_uint32(st->buf->data + 28, G_BIG_ENDIAN);
131
3.84k
}
132
/**
133
 * fu_struct_fdt_get_size_dt_strings: (skip):
134
 **/
135
guint32
136
fu_struct_fdt_get_size_dt_strings(const FuStructFdt *st)
137
7.10k
{
138
7.10k
    g_return_val_if_fail(st != NULL, 0x0);
139
7.10k
    return fu_memread_uint32(st->buf->data + 32, G_BIG_ENDIAN);
140
7.10k
}
141
/**
142
 * fu_struct_fdt_get_size_dt_struct: (skip):
143
 **/
144
guint32
145
fu_struct_fdt_get_size_dt_struct(const FuStructFdt *st)
146
10.2k
{
147
10.2k
    g_return_val_if_fail(st != NULL, 0x0);
148
10.2k
    return fu_memread_uint32(st->buf->data + 36, G_BIG_ENDIAN);
149
10.2k
}
150
151
/* setters */
152
/**
153
 * fu_struct_fdt_set_magic: (skip):
154
 **/
155
static void
156
fu_struct_fdt_set_magic(FuStructFdt *st, guint32 value)
157
1.35k
{
158
1.35k
    g_return_if_fail(st != NULL);
159
1.35k
    fu_memwrite_uint32(st->buf->data + 0, value, G_BIG_ENDIAN);
160
1.35k
}
161
/**
162
 * fu_struct_fdt_set_totalsize: (skip):
163
 **/
164
void
165
fu_struct_fdt_set_totalsize(FuStructFdt *st, guint32 value)
166
1.21k
{
167
1.21k
    g_return_if_fail(st != NULL);
168
1.21k
    fu_memwrite_uint32(st->buf->data + 4, value, G_BIG_ENDIAN);
169
1.21k
}
170
/**
171
 * fu_struct_fdt_set_off_dt_struct: (skip):
172
 **/
173
void
174
fu_struct_fdt_set_off_dt_struct(FuStructFdt *st, guint32 value)
175
1.21k
{
176
1.21k
    g_return_if_fail(st != NULL);
177
1.21k
    fu_memwrite_uint32(st->buf->data + 8, value, G_BIG_ENDIAN);
178
1.21k
}
179
/**
180
 * fu_struct_fdt_set_off_dt_strings: (skip):
181
 **/
182
void
183
fu_struct_fdt_set_off_dt_strings(FuStructFdt *st, guint32 value)
184
1.21k
{
185
1.21k
    g_return_if_fail(st != NULL);
186
1.21k
    fu_memwrite_uint32(st->buf->data + 12, value, G_BIG_ENDIAN);
187
1.21k
}
188
/**
189
 * fu_struct_fdt_set_off_mem_rsvmap: (skip):
190
 **/
191
void
192
fu_struct_fdt_set_off_mem_rsvmap(FuStructFdt *st, guint32 value)
193
1.21k
{
194
1.21k
    g_return_if_fail(st != NULL);
195
1.21k
    fu_memwrite_uint32(st->buf->data + 16, value, G_BIG_ENDIAN);
196
1.21k
}
197
/**
198
 * fu_struct_fdt_set_version: (skip):
199
 **/
200
void
201
fu_struct_fdt_set_version(FuStructFdt *st, guint32 value)
202
1.21k
{
203
1.21k
    g_return_if_fail(st != NULL);
204
1.21k
    fu_memwrite_uint32(st->buf->data + 20, value, G_BIG_ENDIAN);
205
1.21k
}
206
/**
207
 * fu_struct_fdt_set_last_comp_version: (skip):
208
 **/
209
void
210
fu_struct_fdt_set_last_comp_version(FuStructFdt *st, guint32 value)
211
1.35k
{
212
1.35k
    g_return_if_fail(st != NULL);
213
1.35k
    fu_memwrite_uint32(st->buf->data + 24, value, G_BIG_ENDIAN);
214
1.35k
}
215
/**
216
 * fu_struct_fdt_set_boot_cpuid_phys: (skip):
217
 **/
218
void
219
fu_struct_fdt_set_boot_cpuid_phys(FuStructFdt *st, guint32 value)
220
1.21k
{
221
1.21k
    g_return_if_fail(st != NULL);
222
1.21k
    fu_memwrite_uint32(st->buf->data + 28, value, G_BIG_ENDIAN);
223
1.21k
}
224
/**
225
 * fu_struct_fdt_set_size_dt_strings: (skip):
226
 **/
227
void
228
fu_struct_fdt_set_size_dt_strings(FuStructFdt *st, guint32 value)
229
1.21k
{
230
1.21k
    g_return_if_fail(st != NULL);
231
1.21k
    fu_memwrite_uint32(st->buf->data + 32, value, G_BIG_ENDIAN);
232
1.21k
}
233
/**
234
 * fu_struct_fdt_set_size_dt_struct: (skip):
235
 **/
236
void
237
fu_struct_fdt_set_size_dt_struct(FuStructFdt *st, guint32 value)
238
1.21k
{
239
1.21k
    g_return_if_fail(st != NULL);
240
1.21k
    fu_memwrite_uint32(st->buf->data + 36, value, G_BIG_ENDIAN);
241
1.21k
}
242
/**
243
 * fu_struct_fdt_new: (skip):
244
 **/
245
FuStructFdt *
246
fu_struct_fdt_new(void)
247
1.35k
{
248
1.35k
    FuStructFdt *st = fu_struct_fdt_new_internal();
249
1.35k
    st->buf = g_byte_array_sized_new(40);
250
1.35k
    fu_byte_array_set_size(st->buf, 40, 0x0);
251
1.35k
    fu_struct_fdt_set_magic(st, 0xD00DFEED);
252
1.35k
    fu_struct_fdt_set_last_comp_version(st, 2);
253
1.35k
    return st;
254
1.35k
}
255
/**
256
 * fu_struct_fdt_to_string: (skip):
257
 **/
258
static gchar *
259
fu_struct_fdt_to_string(const FuStructFdt *st)
260
0
{
261
0
    g_autoptr(GString) str = g_string_new("FuStructFdt:\n");
262
0
    g_return_val_if_fail(st != NULL, NULL);
263
0
    g_string_append_printf(str, "  magic: 0x%x\n",
264
0
                           (guint) fu_struct_fdt_get_magic(st));
265
0
    g_string_append_printf(str, "  totalsize: 0x%x\n",
266
0
                           (guint) fu_struct_fdt_get_totalsize(st));
267
0
    g_string_append_printf(str, "  off_dt_struct: 0x%x\n",
268
0
                           (guint) fu_struct_fdt_get_off_dt_struct(st));
269
0
    g_string_append_printf(str, "  off_dt_strings: 0x%x\n",
270
0
                           (guint) fu_struct_fdt_get_off_dt_strings(st));
271
0
    g_string_append_printf(str, "  off_mem_rsvmap: 0x%x\n",
272
0
                           (guint) fu_struct_fdt_get_off_mem_rsvmap(st));
273
0
    g_string_append_printf(str, "  version: 0x%x\n",
274
0
                           (guint) fu_struct_fdt_get_version(st));
275
0
    g_string_append_printf(str, "  last_comp_version: 0x%x\n",
276
0
                           (guint) fu_struct_fdt_get_last_comp_version(st));
277
0
    g_string_append_printf(str, "  boot_cpuid_phys: 0x%x\n",
278
0
                           (guint) fu_struct_fdt_get_boot_cpuid_phys(st));
279
0
    g_string_append_printf(str, "  size_dt_strings: 0x%x\n",
280
0
                           (guint) fu_struct_fdt_get_size_dt_strings(st));
281
0
    g_string_append_printf(str, "  size_dt_struct: 0x%x\n",
282
0
                           (guint) fu_struct_fdt_get_size_dt_struct(st));
283
0
    if (str->len > 0)
284
0
        g_string_set_size(str, str->len - 1);
285
0
    return g_string_free(g_steal_pointer(&str), FALSE);
286
0
}
287
static gboolean
288
fu_struct_fdt_validate_internal(FuStructFdt *st, GError **error)
289
184k
{
290
184k
    g_return_val_if_fail(st != NULL, FALSE);
291
184k
    if (fu_struct_fdt_get_magic(st) != 0xD00DFEED) {
292
176k
        g_set_error(error,
293
176k
                    FWUPD_ERROR,
294
176k
                    FWUPD_ERROR_INVALID_DATA,
295
176k
                    "constant FuStructFdt.magic was not valid, "
296
176k
                    "expected 0x%x and got 0x%x",
297
176k
                    (guint) 0xD00DFEED,
298
176k
                    (guint) fu_struct_fdt_get_magic(st));
299
176k
        return FALSE;
300
176k
    }
301
7.81k
    return TRUE;
302
184k
}
303
/**
304
 * fu_struct_fdt_validate_stream: (skip):
305
 **/
306
gboolean
307
fu_struct_fdt_validate_stream(GInputStream *stream, gsize offset, GError **error)
308
188k
{
309
188k
    g_autoptr(FuStructFdt) st = fu_struct_fdt_new_internal();
310
188k
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
311
188k
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
312
188k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
313
188k
    if (st->buf == NULL) {
314
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
315
0
        return FALSE;
316
0
    }
317
188k
    if (st->buf->len != 40) {
318
7.88k
        g_set_error(error,
319
7.88k
                    FWUPD_ERROR,
320
7.88k
                    FWUPD_ERROR_INVALID_DATA,
321
7.88k
                    "FuStructFdt requested 0x%x and got 0x%x",
322
7.88k
                    (guint) 40,
323
7.88k
                    (guint) st->buf->len);
324
7.88k
        return FALSE;
325
7.88k
    }
326
180k
    return fu_struct_fdt_validate_internal(st, error);
327
188k
}
328
static gboolean
329
fu_struct_fdt_parse_internal(FuStructFdt *st, GError **error)
330
3.90k
{
331
3.90k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
332
0
        g_autofree gchar *str = fu_struct_fdt_to_string(st);
333
0
        g_debug("%s", str);
334
0
    }
335
3.90k
    if (!fu_struct_fdt_validate_internal(st, error))
336
0
        return FALSE;
337
3.90k
    return TRUE;
338
3.90k
}
339
/**
340
 * fu_struct_fdt_parse_stream: (skip):
341
 **/
342
FuStructFdt *
343
fu_struct_fdt_parse_stream(GInputStream *stream, gsize offset, GError **error)
344
3.90k
{
345
3.90k
    g_autoptr(FuStructFdt) st = fu_struct_fdt_new_internal();
346
3.90k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
347
3.90k
    if (st->buf == NULL) {
348
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
349
0
        return NULL;
350
0
    }
351
3.90k
    if (st->buf->len != 40) {
352
0
        g_set_error(error,
353
0
                    FWUPD_ERROR,
354
0
                    FWUPD_ERROR_INVALID_DATA,
355
0
                    "FuStructFdt requested 0x%x and got 0x%x",
356
0
                    (guint) 40,
357
0
                    (guint) st->buf->len);
358
0
        return NULL;
359
0
    }
360
3.90k
    if (!fu_struct_fdt_parse_internal(st, error))
361
0
        return NULL;
362
3.90k
    return g_steal_pointer(&st);
363
3.90k
}
364
/**
365
 * fu_struct_fdt_reserve_entry_ref: (skip):
366
 **/
367
FuStructFdtReserveEntry *
368
fu_struct_fdt_reserve_entry_ref(FuStructFdtReserveEntry *st)
369
0
{
370
0
    g_return_val_if_fail(st != NULL, NULL);
371
0
    st->refcount++;
372
0
    return st;
373
0
}
374
/**
375
 * fu_struct_fdt_reserve_entry_unref: (skip):
376
 **/
377
void
378
fu_struct_fdt_reserve_entry_unref(FuStructFdtReserveEntry *st)
379
281k
{
380
281k
    g_return_if_fail(st != NULL);
381
281k
    if (st->refcount == 0) {
382
0
        g_critical("FuStructFdtReserveEntry refcount already zero");
383
0
        return;
384
0
    }
385
281k
    if (--st->refcount > 0)
386
0
        return;
387
281k
    if (st->buf != NULL)
388
281k
        g_byte_array_unref(st->buf);
389
281k
    g_free(st);
390
281k
}
391
/**
392
 * fu_struct_fdt_reserve_entry_new_internal: (skip):
393
 **/
394
static FuStructFdtReserveEntry *
395
fu_struct_fdt_reserve_entry_new_internal(void)
396
281k
{
397
281k
    FuStructFdtReserveEntry *st = g_new0(FuStructFdtReserveEntry, 1);
398
281k
    st->refcount = 1;
399
281k
    return st;
400
281k
}
401
402
/* getters */
403
/**
404
 * fu_struct_fdt_reserve_entry_get_address: (skip):
405
 **/
406
guint64
407
fu_struct_fdt_reserve_entry_get_address(const FuStructFdtReserveEntry *st)
408
280k
{
409
280k
    g_return_val_if_fail(st != NULL, 0x0);
410
280k
    return fu_memread_uint64(st->buf->data + 0, G_BIG_ENDIAN);
411
280k
}
412
/**
413
 * fu_struct_fdt_reserve_entry_get_size: (skip):
414
 **/
415
guint64
416
fu_struct_fdt_reserve_entry_get_size(const FuStructFdtReserveEntry *st)
417
280k
{
418
280k
    g_return_val_if_fail(st != NULL, 0x0);
419
280k
    return fu_memread_uint64(st->buf->data + 8, G_BIG_ENDIAN);
420
280k
}
421
422
/* setters */
423
/**
424
 * fu_struct_fdt_reserve_entry_set_address: (skip):
425
 **/
426
void
427
fu_struct_fdt_reserve_entry_set_address(FuStructFdtReserveEntry *st, guint64 value)
428
0
{
429
0
    g_return_if_fail(st != NULL);
430
0
    fu_memwrite_uint64(st->buf->data + 0, value, G_BIG_ENDIAN);
431
0
}
432
/**
433
 * fu_struct_fdt_reserve_entry_set_size: (skip):
434
 **/
435
void
436
fu_struct_fdt_reserve_entry_set_size(FuStructFdtReserveEntry *st, guint64 value)
437
0
{
438
0
    g_return_if_fail(st != NULL);
439
0
    fu_memwrite_uint64(st->buf->data + 8, value, G_BIG_ENDIAN);
440
0
}
441
/**
442
 * fu_struct_fdt_reserve_entry_new: (skip):
443
 **/
444
FuStructFdtReserveEntry *
445
fu_struct_fdt_reserve_entry_new(void)
446
1.35k
{
447
1.35k
    FuStructFdtReserveEntry *st = fu_struct_fdt_reserve_entry_new_internal();
448
1.35k
    st->buf = g_byte_array_sized_new(16);
449
1.35k
    fu_byte_array_set_size(st->buf, 16, 0x0);
450
1.35k
    return st;
451
1.35k
}
452
/**
453
 * fu_struct_fdt_reserve_entry_to_string: (skip):
454
 **/
455
static gchar *
456
fu_struct_fdt_reserve_entry_to_string(const FuStructFdtReserveEntry *st)
457
0
{
458
0
    g_autoptr(GString) str = g_string_new("FuStructFdtReserveEntry:\n");
459
0
    g_return_val_if_fail(st != NULL, NULL);
460
0
    g_string_append_printf(str, "  address: 0x%x\n",
461
0
                           (guint) fu_struct_fdt_reserve_entry_get_address(st));
462
0
    g_string_append_printf(str, "  size: 0x%x\n",
463
0
                           (guint) fu_struct_fdt_reserve_entry_get_size(st));
464
0
    if (str->len > 0)
465
0
        g_string_set_size(str, str->len - 1);
466
0
    return g_string_free(g_steal_pointer(&str), FALSE);
467
0
}
468
static gboolean
469
fu_struct_fdt_reserve_entry_validate_internal(FuStructFdtReserveEntry *st, GError **error)
470
280k
{
471
280k
    g_return_val_if_fail(st != NULL, FALSE);
472
280k
    return TRUE;
473
280k
}
474
static gboolean
475
fu_struct_fdt_reserve_entry_parse_internal(FuStructFdtReserveEntry *st, GError **error)
476
280k
{
477
280k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
478
0
        g_autofree gchar *str = fu_struct_fdt_reserve_entry_to_string(st);
479
0
        g_debug("%s", str);
480
0
    }
481
280k
    if (!fu_struct_fdt_reserve_entry_validate_internal(st, error))
482
0
        return FALSE;
483
280k
    return TRUE;
484
280k
}
485
/**
486
 * fu_struct_fdt_reserve_entry_parse_stream: (skip):
487
 **/
488
FuStructFdtReserveEntry *
489
fu_struct_fdt_reserve_entry_parse_stream(GInputStream *stream, gsize offset, GError **error)
490
280k
{
491
280k
    g_autoptr(FuStructFdtReserveEntry) st = fu_struct_fdt_reserve_entry_new_internal();
492
280k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 16, NULL, error);
493
280k
    if (st->buf == NULL) {
494
0
        g_prefix_error(error, "FuStructFdtReserveEntry failed read of 0x%x: ", (guint) 16);
495
0
        return NULL;
496
0
    }
497
280k
    if (st->buf->len != 16) {
498
247
        g_set_error(error,
499
247
                    FWUPD_ERROR,
500
247
                    FWUPD_ERROR_INVALID_DATA,
501
247
                    "FuStructFdtReserveEntry requested 0x%x and got 0x%x",
502
247
                    (guint) 16,
503
247
                    (guint) st->buf->len);
504
247
        return NULL;
505
247
    }
506
280k
    if (!fu_struct_fdt_reserve_entry_parse_internal(st, error))
507
0
        return NULL;
508
280k
    return g_steal_pointer(&st);
509
280k
}
510
/**
511
 * fu_struct_fdt_prop_ref: (skip):
512
 **/
513
FuStructFdtProp *
514
fu_struct_fdt_prop_ref(FuStructFdtProp *st)
515
0
{
516
0
    g_return_val_if_fail(st != NULL, NULL);
517
0
    st->refcount++;
518
0
    return st;
519
0
}
520
/**
521
 * fu_struct_fdt_prop_unref: (skip):
522
 **/
523
void
524
fu_struct_fdt_prop_unref(FuStructFdtProp *st)
525
46.7k
{
526
46.7k
    g_return_if_fail(st != NULL);
527
46.7k
    if (st->refcount == 0) {
528
0
        g_critical("FuStructFdtProp refcount already zero");
529
0
        return;
530
0
    }
531
46.7k
    if (--st->refcount > 0)
532
0
        return;
533
46.7k
    if (st->buf != NULL)
534
46.7k
        g_byte_array_unref(st->buf);
535
46.7k
    g_free(st);
536
46.7k
}
537
/**
538
 * fu_struct_fdt_prop_new_internal: (skip):
539
 **/
540
static FuStructFdtProp *
541
fu_struct_fdt_prop_new_internal(void)
542
46.7k
{
543
46.7k
    FuStructFdtProp *st = g_new0(FuStructFdtProp, 1);
544
46.7k
    st->refcount = 1;
545
46.7k
    return st;
546
46.7k
}
547
548
/* getters */
549
/**
550
 * fu_struct_fdt_prop_get_len: (skip):
551
 **/
552
guint32
553
fu_struct_fdt_prop_get_len(const FuStructFdtProp *st)
554
33.2k
{
555
33.2k
    g_return_val_if_fail(st != NULL, 0x0);
556
33.2k
    return fu_memread_uint32(st->buf->data + 0, G_BIG_ENDIAN);
557
33.2k
}
558
/**
559
 * fu_struct_fdt_prop_get_nameoff: (skip):
560
 **/
561
guint32
562
fu_struct_fdt_prop_get_nameoff(const FuStructFdtProp *st)
563
33.2k
{
564
33.2k
    g_return_val_if_fail(st != NULL, 0x0);
565
33.2k
    return fu_memread_uint32(st->buf->data + 4, G_BIG_ENDIAN);
566
33.2k
}
567
568
/* setters */
569
/**
570
 * fu_struct_fdt_prop_set_len: (skip):
571
 **/
572
void
573
fu_struct_fdt_prop_set_len(FuStructFdtProp *st, guint32 value)
574
13.5k
{
575
13.5k
    g_return_if_fail(st != NULL);
576
13.5k
    fu_memwrite_uint32(st->buf->data + 0, value, G_BIG_ENDIAN);
577
13.5k
}
578
/**
579
 * fu_struct_fdt_prop_set_nameoff: (skip):
580
 **/
581
void
582
fu_struct_fdt_prop_set_nameoff(FuStructFdtProp *st, guint32 value)
583
13.5k
{
584
13.5k
    g_return_if_fail(st != NULL);
585
13.5k
    fu_memwrite_uint32(st->buf->data + 4, value, G_BIG_ENDIAN);
586
13.5k
}
587
/**
588
 * fu_struct_fdt_prop_new: (skip):
589
 **/
590
FuStructFdtProp *
591
fu_struct_fdt_prop_new(void)
592
13.5k
{
593
13.5k
    FuStructFdtProp *st = fu_struct_fdt_prop_new_internal();
594
13.5k
    st->buf = g_byte_array_sized_new(8);
595
13.5k
    fu_byte_array_set_size(st->buf, 8, 0x0);
596
13.5k
    return st;
597
13.5k
}
598
/**
599
 * fu_struct_fdt_prop_to_string: (skip):
600
 **/
601
static gchar *
602
fu_struct_fdt_prop_to_string(const FuStructFdtProp *st)
603
0
{
604
0
    g_autoptr(GString) str = g_string_new("FuStructFdtProp:\n");
605
0
    g_return_val_if_fail(st != NULL, NULL);
606
0
    g_string_append_printf(str, "  len: 0x%x\n",
607
0
                           (guint) fu_struct_fdt_prop_get_len(st));
608
0
    g_string_append_printf(str, "  nameoff: 0x%x\n",
609
0
                           (guint) fu_struct_fdt_prop_get_nameoff(st));
610
0
    if (str->len > 0)
611
0
        g_string_set_size(str, str->len - 1);
612
0
    return g_string_free(g_steal_pointer(&str), FALSE);
613
0
}
614
static gboolean
615
fu_struct_fdt_prop_validate_internal(FuStructFdtProp *st, GError **error)
616
33.2k
{
617
33.2k
    g_return_val_if_fail(st != NULL, FALSE);
618
33.2k
    return TRUE;
619
33.2k
}
620
static gboolean
621
fu_struct_fdt_prop_parse_internal(FuStructFdtProp *st, GError **error)
622
33.2k
{
623
33.2k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
624
0
        g_autofree gchar *str = fu_struct_fdt_prop_to_string(st);
625
0
        g_debug("%s", str);
626
0
    }
627
33.2k
    if (!fu_struct_fdt_prop_validate_internal(st, error))
628
0
        return FALSE;
629
33.2k
    return TRUE;
630
33.2k
}
631
632
/**
633
 * fu_struct_fdt_prop_parse: (skip):
634
 **/
635
FuStructFdtProp *
636
fu_struct_fdt_prop_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
637
33.2k
{
638
33.2k
    g_autoptr(FuStructFdtProp) st = fu_struct_fdt_prop_new_internal();
639
33.2k
    g_return_val_if_fail(buf != NULL, NULL);
640
33.2k
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
641
33.2k
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
642
13
        g_prefix_error_literal(error, "invalid struct FuStructFdtProp: ");
643
13
        return NULL;
644
13
    }
645
33.2k
    st->buf = g_byte_array_new();
646
33.2k
    g_byte_array_append(st->buf, buf + offset, 8);
647
33.2k
    if (!fu_struct_fdt_prop_parse_internal(st, error))
648
0
        return NULL;
649
33.2k
    return g_steal_pointer(&st);
650
33.2k
}