Coverage Report

Created: 2026-02-26 06:27

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