Coverage Report

Created: 2025-12-14 06:56

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
303k
{
37
303k
    g_return_if_fail(st != NULL);
38
303k
    if (st->refcount == 0) {
39
0
        g_critical("FuStructFdt refcount already zero");
40
0
        return;
41
0
    }
42
303k
    if (--st->refcount > 0)
43
0
        return;
44
303k
    if (st->buf != NULL)
45
302k
        g_byte_array_unref(st->buf);
46
303k
    g_free(st);
47
303k
}
48
/**
49
 * fu_struct_fdt_new_internal: (skip):
50
 **/
51
static FuStructFdt *
52
fu_struct_fdt_new_internal(void)
53
303k
{
54
303k
    FuStructFdt *st = g_new0(FuStructFdt, 1);
55
303k
    st->refcount = 1;
56
303k
    return st;
57
303k
}
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
580k
{
66
580k
    g_return_val_if_fail(st != NULL, 0x0);
67
580k
    return fu_memread_uint32(st->buf->data + 0, G_BIG_ENDIAN);
68
580k
}
69
/**
70
 * fu_struct_fdt_get_totalsize: (skip):
71
 **/
72
guint32
73
fu_struct_fdt_get_totalsize(const FuStructFdt *st)
74
3.86k
{
75
3.86k
    g_return_val_if_fail(st != NULL, 0x0);
76
3.86k
    return fu_memread_uint32(st->buf->data + 4, G_BIG_ENDIAN);
77
3.86k
}
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.32k
{
84
3.32k
    g_return_val_if_fail(st != NULL, 0x0);
85
3.32k
    return fu_memread_uint32(st->buf->data + 8, G_BIG_ENDIAN);
86
3.32k
}
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.50k
{
93
3.50k
    g_return_val_if_fail(st != NULL, 0x0);
94
3.50k
    return fu_memread_uint32(st->buf->data + 12, G_BIG_ENDIAN);
95
3.50k
}
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.80k
{
102
3.80k
    g_return_val_if_fail(st != NULL, 0x0);
103
3.80k
    return fu_memread_uint32(st->buf->data + 16, G_BIG_ENDIAN);
104
3.80k
}
105
/**
106
 * fu_struct_fdt_get_version: (skip):
107
 **/
108
guint32
109
fu_struct_fdt_get_version(const FuStructFdt *st)
110
3.52k
{
111
3.52k
    g_return_val_if_fail(st != NULL, 0x0);
112
3.52k
    return fu_memread_uint32(st->buf->data + 20, G_BIG_ENDIAN);
113
3.52k
}
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.57k
{
120
3.57k
    g_return_val_if_fail(st != NULL, 0x0);
121
3.57k
    return fu_memread_uint32(st->buf->data + 24, G_BIG_ENDIAN);
122
3.57k
}
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.80k
{
129
3.80k
    g_return_val_if_fail(st != NULL, 0x0);
130
3.80k
    return fu_memread_uint32(st->buf->data + 28, G_BIG_ENDIAN);
131
3.80k
}
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.01k
{
138
7.01k
    g_return_val_if_fail(st != NULL, 0x0);
139
7.01k
    return fu_memread_uint32(st->buf->data + 32, G_BIG_ENDIAN);
140
7.01k
}
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.1k
{
147
10.1k
    g_return_val_if_fail(st != NULL, 0x0);
148
10.1k
    return fu_memread_uint32(st->buf->data + 36, G_BIG_ENDIAN);
149
10.1k
}
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.34k
{
158
1.34k
    g_return_if_fail(st != NULL);
159
1.34k
    fu_memwrite_uint32(st->buf->data + 0, value, G_BIG_ENDIAN);
160
1.34k
}
161
/**
162
 * fu_struct_fdt_set_totalsize: (skip):
163
 **/
164
void
165
fu_struct_fdt_set_totalsize(FuStructFdt *st, guint32 value)
166
1.18k
{
167
1.18k
    g_return_if_fail(st != NULL);
168
1.18k
    fu_memwrite_uint32(st->buf->data + 4, value, G_BIG_ENDIAN);
169
1.18k
}
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.18k
{
176
1.18k
    g_return_if_fail(st != NULL);
177
1.18k
    fu_memwrite_uint32(st->buf->data + 8, value, G_BIG_ENDIAN);
178
1.18k
}
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.18k
{
185
1.18k
    g_return_if_fail(st != NULL);
186
1.18k
    fu_memwrite_uint32(st->buf->data + 12, value, G_BIG_ENDIAN);
187
1.18k
}
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.18k
{
194
1.18k
    g_return_if_fail(st != NULL);
195
1.18k
    fu_memwrite_uint32(st->buf->data + 16, value, G_BIG_ENDIAN);
196
1.18k
}
197
/**
198
 * fu_struct_fdt_set_version: (skip):
199
 **/
200
void
201
fu_struct_fdt_set_version(FuStructFdt *st, guint32 value)
202
1.18k
{
203
1.18k
    g_return_if_fail(st != NULL);
204
1.18k
    fu_memwrite_uint32(st->buf->data + 20, value, G_BIG_ENDIAN);
205
1.18k
}
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.34k
{
212
1.34k
    g_return_if_fail(st != NULL);
213
1.34k
    fu_memwrite_uint32(st->buf->data + 24, value, G_BIG_ENDIAN);
214
1.34k
}
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.18k
{
221
1.18k
    g_return_if_fail(st != NULL);
222
1.18k
    fu_memwrite_uint32(st->buf->data + 28, value, G_BIG_ENDIAN);
223
1.18k
}
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.18k
{
230
1.18k
    g_return_if_fail(st != NULL);
231
1.18k
    fu_memwrite_uint32(st->buf->data + 32, value, G_BIG_ENDIAN);
232
1.18k
}
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.18k
{
239
1.18k
    g_return_if_fail(st != NULL);
240
1.18k
    fu_memwrite_uint32(st->buf->data + 36, value, G_BIG_ENDIAN);
241
1.18k
}
242
/**
243
 * fu_struct_fdt_new: (skip):
244
 **/
245
FuStructFdt *
246
fu_struct_fdt_new(void)
247
1.34k
{
248
1.34k
    FuStructFdt *st = fu_struct_fdt_new_internal();
249
1.34k
    st->buf = g_byte_array_sized_new(40);
250
1.34k
    fu_byte_array_set_size(st->buf, 40, 0x0);
251
1.34k
    fu_struct_fdt_set_magic(st, 0xD00DFEED);
252
1.34k
    fu_struct_fdt_set_last_comp_version(st, 2);
253
1.34k
    return st;
254
1.34k
}
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, "  totalsize: 0x%x\n",
264
0
                           (guint) fu_struct_fdt_get_totalsize(st));
265
0
    g_string_append_printf(str, "  off_dt_struct: 0x%x\n",
266
0
                           (guint) fu_struct_fdt_get_off_dt_struct(st));
267
0
    g_string_append_printf(str, "  off_dt_strings: 0x%x\n",
268
0
                           (guint) fu_struct_fdt_get_off_dt_strings(st));
269
0
    g_string_append_printf(str, "  off_mem_rsvmap: 0x%x\n",
270
0
                           (guint) fu_struct_fdt_get_off_mem_rsvmap(st));
271
0
    g_string_append_printf(str, "  version: 0x%x\n",
272
0
                           (guint) fu_struct_fdt_get_version(st));
273
0
    g_string_append_printf(str, "  last_comp_version: 0x%x\n",
274
0
                           (guint) fu_struct_fdt_get_last_comp_version(st));
275
0
    g_string_append_printf(str, "  boot_cpuid_phys: 0x%x\n",
276
0
                           (guint) fu_struct_fdt_get_boot_cpuid_phys(st));
277
0
    g_string_append_printf(str, "  size_dt_strings: 0x%x\n",
278
0
                           (guint) fu_struct_fdt_get_size_dt_strings(st));
279
0
    g_string_append_printf(str, "  size_dt_struct: 0x%x\n",
280
0
                           (guint) fu_struct_fdt_get_size_dt_struct(st));
281
0
    if (str->len > 0)
282
0
        g_string_set_size(str, str->len - 1);
283
0
    return g_string_free(g_steal_pointer(&str), FALSE);
284
0
}
285
static gboolean
286
fu_struct_fdt_validate_internal(FuStructFdt *st, GError **error)
287
294k
{
288
294k
    g_return_val_if_fail(st != NULL, FALSE);
289
294k
    if (fu_struct_fdt_get_magic(st) != 0xD00DFEED) {
290
286k
        g_set_error(error,
291
286k
                    FWUPD_ERROR,
292
286k
                    FWUPD_ERROR_INVALID_DATA,
293
286k
                    "constant FuStructFdt.magic was not valid, "
294
286k
                    "expected 0x%x and got 0x%x",
295
286k
                    (guint) 0xD00DFEED,
296
286k
                    (guint) fu_struct_fdt_get_magic(st));
297
286k
        return FALSE;
298
286k
    }
299
7.73k
    return TRUE;
300
294k
}
301
/**
302
 * fu_struct_fdt_validate_stream: (skip):
303
 **/
304
gboolean
305
fu_struct_fdt_validate_stream(GInputStream *stream, gsize offset, GError **error)
306
298k
{
307
298k
    g_autoptr(FuStructFdt) st = fu_struct_fdt_new_internal();
308
298k
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
309
298k
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
310
298k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
311
298k
    if (st->buf == NULL) {
312
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
313
0
        return FALSE;
314
0
    }
315
298k
    if (st->buf->len != 40) {
316
8.19k
        g_set_error(error,
317
8.19k
                    FWUPD_ERROR,
318
8.19k
                    FWUPD_ERROR_INVALID_DATA,
319
8.19k
                    "FuStructFdt requested 0x%x and got 0x%x",
320
8.19k
                    (guint) 40,
321
8.19k
                    (guint) st->buf->len);
322
8.19k
        return FALSE;
323
8.19k
    }
324
290k
    return fu_struct_fdt_validate_internal(st, error);
325
298k
}
326
static gboolean
327
fu_struct_fdt_parse_internal(FuStructFdt *st, GError **error)
328
3.86k
{
329
3.86k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
330
0
        g_autofree gchar *str = fu_struct_fdt_to_string(st);
331
0
        g_debug("%s", str);
332
0
    }
333
3.86k
    if (!fu_struct_fdt_validate_internal(st, error))
334
0
        return FALSE;
335
3.86k
    return TRUE;
336
3.86k
}
337
/**
338
 * fu_struct_fdt_parse_stream: (skip):
339
 **/
340
FuStructFdt *
341
fu_struct_fdt_parse_stream(GInputStream *stream, gsize offset, GError **error)
342
3.86k
{
343
3.86k
    g_autoptr(FuStructFdt) st = fu_struct_fdt_new_internal();
344
3.86k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
345
3.86k
    if (st->buf == NULL) {
346
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
347
0
        return NULL;
348
0
    }
349
3.86k
    if (st->buf->len != 40) {
350
0
        g_set_error(error,
351
0
                    FWUPD_ERROR,
352
0
                    FWUPD_ERROR_INVALID_DATA,
353
0
                    "FuStructFdt requested 0x%x and got 0x%x",
354
0
                    (guint) 40,
355
0
                    (guint) st->buf->len);
356
0
        return NULL;
357
0
    }
358
3.86k
    if (!fu_struct_fdt_parse_internal(st, error))
359
0
        return NULL;
360
3.86k
    return g_steal_pointer(&st);
361
3.86k
}
362
/**
363
 * fu_struct_fdt_reserve_entry_ref: (skip):
364
 **/
365
FuStructFdtReserveEntry *
366
fu_struct_fdt_reserve_entry_ref(FuStructFdtReserveEntry *st)
367
0
{
368
0
    g_return_val_if_fail(st != NULL, NULL);
369
0
    st->refcount++;
370
0
    return st;
371
0
}
372
/**
373
 * fu_struct_fdt_reserve_entry_unref: (skip):
374
 **/
375
void
376
fu_struct_fdt_reserve_entry_unref(FuStructFdtReserveEntry *st)
377
245k
{
378
245k
    g_return_if_fail(st != NULL);
379
245k
    if (st->refcount == 0) {
380
0
        g_critical("FuStructFdtReserveEntry refcount already zero");
381
0
        return;
382
0
    }
383
245k
    if (--st->refcount > 0)
384
0
        return;
385
245k
    if (st->buf != NULL)
386
245k
        g_byte_array_unref(st->buf);
387
245k
    g_free(st);
388
245k
}
389
/**
390
 * fu_struct_fdt_reserve_entry_new_internal: (skip):
391
 **/
392
static FuStructFdtReserveEntry *
393
fu_struct_fdt_reserve_entry_new_internal(void)
394
245k
{
395
245k
    FuStructFdtReserveEntry *st = g_new0(FuStructFdtReserveEntry, 1);
396
245k
    st->refcount = 1;
397
245k
    return st;
398
245k
}
399
400
/* getters */
401
/**
402
 * fu_struct_fdt_reserve_entry_get_address: (skip):
403
 **/
404
guint64
405
fu_struct_fdt_reserve_entry_get_address(const FuStructFdtReserveEntry *st)
406
244k
{
407
244k
    g_return_val_if_fail(st != NULL, 0x0);
408
244k
    return fu_memread_uint64(st->buf->data + 0, G_BIG_ENDIAN);
409
244k
}
410
/**
411
 * fu_struct_fdt_reserve_entry_get_size: (skip):
412
 **/
413
guint64
414
fu_struct_fdt_reserve_entry_get_size(const FuStructFdtReserveEntry *st)
415
244k
{
416
244k
    g_return_val_if_fail(st != NULL, 0x0);
417
244k
    return fu_memread_uint64(st->buf->data + 8, G_BIG_ENDIAN);
418
244k
}
419
420
/* setters */
421
/**
422
 * fu_struct_fdt_reserve_entry_set_address: (skip):
423
 **/
424
void
425
fu_struct_fdt_reserve_entry_set_address(FuStructFdtReserveEntry *st, guint64 value)
426
0
{
427
0
    g_return_if_fail(st != NULL);
428
0
    fu_memwrite_uint64(st->buf->data + 0, value, G_BIG_ENDIAN);
429
0
}
430
/**
431
 * fu_struct_fdt_reserve_entry_set_size: (skip):
432
 **/
433
void
434
fu_struct_fdt_reserve_entry_set_size(FuStructFdtReserveEntry *st, guint64 value)
435
0
{
436
0
    g_return_if_fail(st != NULL);
437
0
    fu_memwrite_uint64(st->buf->data + 8, value, G_BIG_ENDIAN);
438
0
}
439
/**
440
 * fu_struct_fdt_reserve_entry_new: (skip):
441
 **/
442
FuStructFdtReserveEntry *
443
fu_struct_fdt_reserve_entry_new(void)
444
1.34k
{
445
1.34k
    FuStructFdtReserveEntry *st = fu_struct_fdt_reserve_entry_new_internal();
446
1.34k
    st->buf = g_byte_array_sized_new(16);
447
1.34k
    fu_byte_array_set_size(st->buf, 16, 0x0);
448
1.34k
    return st;
449
1.34k
}
450
/**
451
 * fu_struct_fdt_reserve_entry_to_string: (skip):
452
 **/
453
static gchar *
454
fu_struct_fdt_reserve_entry_to_string(const FuStructFdtReserveEntry *st)
455
0
{
456
0
    g_autoptr(GString) str = g_string_new("FuStructFdtReserveEntry:\n");
457
0
    g_return_val_if_fail(st != NULL, NULL);
458
0
    g_string_append_printf(str, "  address: 0x%x\n",
459
0
                           (guint) fu_struct_fdt_reserve_entry_get_address(st));
460
0
    g_string_append_printf(str, "  size: 0x%x\n",
461
0
                           (guint) fu_struct_fdt_reserve_entry_get_size(st));
462
0
    if (str->len > 0)
463
0
        g_string_set_size(str, str->len - 1);
464
0
    return g_string_free(g_steal_pointer(&str), FALSE);
465
0
}
466
static gboolean
467
fu_struct_fdt_reserve_entry_validate_internal(FuStructFdtReserveEntry *st, GError **error)
468
244k
{
469
244k
    g_return_val_if_fail(st != NULL, FALSE);
470
244k
    return TRUE;
471
244k
}
472
static gboolean
473
fu_struct_fdt_reserve_entry_parse_internal(FuStructFdtReserveEntry *st, GError **error)
474
244k
{
475
244k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
476
0
        g_autofree gchar *str = fu_struct_fdt_reserve_entry_to_string(st);
477
0
        g_debug("%s", str);
478
0
    }
479
244k
    if (!fu_struct_fdt_reserve_entry_validate_internal(st, error))
480
0
        return FALSE;
481
244k
    return TRUE;
482
244k
}
483
/**
484
 * fu_struct_fdt_reserve_entry_parse_stream: (skip):
485
 **/
486
FuStructFdtReserveEntry *
487
fu_struct_fdt_reserve_entry_parse_stream(GInputStream *stream, gsize offset, GError **error)
488
244k
{
489
244k
    g_autoptr(FuStructFdtReserveEntry) st = fu_struct_fdt_reserve_entry_new_internal();
490
244k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 16, NULL, error);
491
244k
    if (st->buf == NULL) {
492
0
        g_prefix_error(error, "FuStructFdtReserveEntry failed read of 0x%x: ", (guint) 16);
493
0
        return NULL;
494
0
    }
495
244k
    if (st->buf->len != 16) {
496
249
        g_set_error(error,
497
249
                    FWUPD_ERROR,
498
249
                    FWUPD_ERROR_INVALID_DATA,
499
249
                    "FuStructFdtReserveEntry requested 0x%x and got 0x%x",
500
249
                    (guint) 16,
501
249
                    (guint) st->buf->len);
502
249
        return NULL;
503
249
    }
504
244k
    if (!fu_struct_fdt_reserve_entry_parse_internal(st, error))
505
0
        return NULL;
506
244k
    return g_steal_pointer(&st);
507
244k
}
508
/**
509
 * fu_struct_fdt_prop_ref: (skip):
510
 **/
511
FuStructFdtProp *
512
fu_struct_fdt_prop_ref(FuStructFdtProp *st)
513
0
{
514
0
    g_return_val_if_fail(st != NULL, NULL);
515
0
    st->refcount++;
516
0
    return st;
517
0
}
518
/**
519
 * fu_struct_fdt_prop_unref: (skip):
520
 **/
521
void
522
fu_struct_fdt_prop_unref(FuStructFdtProp *st)
523
44.7k
{
524
44.7k
    g_return_if_fail(st != NULL);
525
44.7k
    if (st->refcount == 0) {
526
0
        g_critical("FuStructFdtProp refcount already zero");
527
0
        return;
528
0
    }
529
44.7k
    if (--st->refcount > 0)
530
0
        return;
531
44.7k
    if (st->buf != NULL)
532
44.7k
        g_byte_array_unref(st->buf);
533
44.7k
    g_free(st);
534
44.7k
}
535
/**
536
 * fu_struct_fdt_prop_new_internal: (skip):
537
 **/
538
static FuStructFdtProp *
539
fu_struct_fdt_prop_new_internal(void)
540
44.7k
{
541
44.7k
    FuStructFdtProp *st = g_new0(FuStructFdtProp, 1);
542
44.7k
    st->refcount = 1;
543
44.7k
    return st;
544
44.7k
}
545
546
/* getters */
547
/**
548
 * fu_struct_fdt_prop_get_len: (skip):
549
 **/
550
guint32
551
fu_struct_fdt_prop_get_len(const FuStructFdtProp *st)
552
32.0k
{
553
32.0k
    g_return_val_if_fail(st != NULL, 0x0);
554
32.0k
    return fu_memread_uint32(st->buf->data + 0, G_BIG_ENDIAN);
555
32.0k
}
556
/**
557
 * fu_struct_fdt_prop_get_nameoff: (skip):
558
 **/
559
guint32
560
fu_struct_fdt_prop_get_nameoff(const FuStructFdtProp *st)
561
32.0k
{
562
32.0k
    g_return_val_if_fail(st != NULL, 0x0);
563
32.0k
    return fu_memread_uint32(st->buf->data + 4, G_BIG_ENDIAN);
564
32.0k
}
565
566
/* setters */
567
/**
568
 * fu_struct_fdt_prop_set_len: (skip):
569
 **/
570
void
571
fu_struct_fdt_prop_set_len(FuStructFdtProp *st, guint32 value)
572
12.7k
{
573
12.7k
    g_return_if_fail(st != NULL);
574
12.7k
    fu_memwrite_uint32(st->buf->data + 0, value, G_BIG_ENDIAN);
575
12.7k
}
576
/**
577
 * fu_struct_fdt_prop_set_nameoff: (skip):
578
 **/
579
void
580
fu_struct_fdt_prop_set_nameoff(FuStructFdtProp *st, guint32 value)
581
12.7k
{
582
12.7k
    g_return_if_fail(st != NULL);
583
12.7k
    fu_memwrite_uint32(st->buf->data + 4, value, G_BIG_ENDIAN);
584
12.7k
}
585
/**
586
 * fu_struct_fdt_prop_new: (skip):
587
 **/
588
FuStructFdtProp *
589
fu_struct_fdt_prop_new(void)
590
12.7k
{
591
12.7k
    FuStructFdtProp *st = fu_struct_fdt_prop_new_internal();
592
12.7k
    st->buf = g_byte_array_sized_new(8);
593
12.7k
    fu_byte_array_set_size(st->buf, 8, 0x0);
594
12.7k
    return st;
595
12.7k
}
596
/**
597
 * fu_struct_fdt_prop_to_string: (skip):
598
 **/
599
static gchar *
600
fu_struct_fdt_prop_to_string(const FuStructFdtProp *st)
601
0
{
602
0
    g_autoptr(GString) str = g_string_new("FuStructFdtProp:\n");
603
0
    g_return_val_if_fail(st != NULL, NULL);
604
0
    g_string_append_printf(str, "  len: 0x%x\n",
605
0
                           (guint) fu_struct_fdt_prop_get_len(st));
606
0
    g_string_append_printf(str, "  nameoff: 0x%x\n",
607
0
                           (guint) fu_struct_fdt_prop_get_nameoff(st));
608
0
    if (str->len > 0)
609
0
        g_string_set_size(str, str->len - 1);
610
0
    return g_string_free(g_steal_pointer(&str), FALSE);
611
0
}
612
static gboolean
613
fu_struct_fdt_prop_validate_internal(FuStructFdtProp *st, GError **error)
614
32.0k
{
615
32.0k
    g_return_val_if_fail(st != NULL, FALSE);
616
32.0k
    return TRUE;
617
32.0k
}
618
static gboolean
619
fu_struct_fdt_prop_parse_internal(FuStructFdtProp *st, GError **error)
620
32.0k
{
621
32.0k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
622
0
        g_autofree gchar *str = fu_struct_fdt_prop_to_string(st);
623
0
        g_debug("%s", str);
624
0
    }
625
32.0k
    if (!fu_struct_fdt_prop_validate_internal(st, error))
626
0
        return FALSE;
627
32.0k
    return TRUE;
628
32.0k
}
629
630
/**
631
 * fu_struct_fdt_prop_parse: (skip):
632
 **/
633
FuStructFdtProp *
634
fu_struct_fdt_prop_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
635
32.0k
{
636
32.0k
    g_autoptr(FuStructFdtProp) st = fu_struct_fdt_prop_new_internal();
637
32.0k
    g_return_val_if_fail(buf != NULL, NULL);
638
32.0k
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
639
32.0k
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
640
12
        g_prefix_error_literal(error, "invalid struct FuStructFdtProp: ");
641
12
        return NULL;
642
12
    }
643
32.0k
    st->buf = g_byte_array_new();
644
32.0k
    g_byte_array_append(st->buf, buf + offset, 8);
645
32.0k
    if (!fu_struct_fdt_prop_parse_internal(st, error))
646
0
        return NULL;
647
32.0k
    return g_steal_pointer(&st);
648
32.0k
}