Coverage Report

Created: 2025-11-24 06:59

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