Coverage Report

Created: 2025-11-11 06:44

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