Coverage Report

Created: 2025-07-01 07:09

/work/fu-fdt-struct.c
Line
Count
Source (jump to first uncovered line)
1
/* auto-generated, do not modify */
2
#include "config.h"
3
4
#include "fu-fdt-struct.h"
5
#include "fu-byte-array.h"
6
#include "fu-mem-private.h"
7
#include "fu-string.h"
8
9
#ifdef G_LOG_DOMAIN
10
  #undef G_LOG_DOMAIN
11
#endif
12
0
#define G_LOG_DOMAIN "FuStruct"
13
14
/* getters */
15
/**
16
 * fu_struct_fdt_get_magic: (skip):
17
 **/
18
static guint32
19
fu_struct_fdt_get_magic(const FuStructFdt *st)
20
9.90M
{
21
9.90M
    g_return_val_if_fail(st != NULL, 0x0);
22
9.90M
    return fu_memread_uint32(st->data + 0, G_BIG_ENDIAN);
23
9.90M
}
24
/**
25
 * fu_struct_fdt_get_totalsize: (skip):
26
 **/
27
guint32
28
fu_struct_fdt_get_totalsize(const FuStructFdt *st)
29
1.97k
{
30
1.97k
    g_return_val_if_fail(st != NULL, 0x0);
31
1.97k
    return fu_memread_uint32(st->data + 4, G_BIG_ENDIAN);
32
1.97k
}
33
/**
34
 * fu_struct_fdt_get_off_dt_struct: (skip):
35
 **/
36
guint32
37
fu_struct_fdt_get_off_dt_struct(const FuStructFdt *st)
38
1.62k
{
39
1.62k
    g_return_val_if_fail(st != NULL, 0x0);
40
1.62k
    return fu_memread_uint32(st->data + 8, G_BIG_ENDIAN);
41
1.62k
}
42
/**
43
 * fu_struct_fdt_get_off_dt_strings: (skip):
44
 **/
45
guint32
46
fu_struct_fdt_get_off_dt_strings(const FuStructFdt *st)
47
1.75k
{
48
1.75k
    g_return_val_if_fail(st != NULL, 0x0);
49
1.75k
    return fu_memread_uint32(st->data + 12, G_BIG_ENDIAN);
50
1.75k
}
51
/**
52
 * fu_struct_fdt_get_off_mem_rsvmap: (skip):
53
 **/
54
guint32
55
fu_struct_fdt_get_off_mem_rsvmap(const FuStructFdt *st)
56
1.92k
{
57
1.92k
    g_return_val_if_fail(st != NULL, 0x0);
58
1.92k
    return fu_memread_uint32(st->data + 16, G_BIG_ENDIAN);
59
1.92k
}
60
/**
61
 * fu_struct_fdt_get_version: (skip):
62
 **/
63
guint32
64
fu_struct_fdt_get_version(const FuStructFdt *st)
65
1.77k
{
66
1.77k
    g_return_val_if_fail(st != NULL, 0x0);
67
1.77k
    return fu_memread_uint32(st->data + 20, G_BIG_ENDIAN);
68
1.77k
}
69
/**
70
 * fu_struct_fdt_get_last_comp_version: (skip):
71
 **/
72
guint32
73
fu_struct_fdt_get_last_comp_version(const FuStructFdt *st)
74
1.81k
{
75
1.81k
    g_return_val_if_fail(st != NULL, 0x0);
76
1.81k
    return fu_memread_uint32(st->data + 24, G_BIG_ENDIAN);
77
1.81k
}
78
/**
79
 * fu_struct_fdt_get_boot_cpuid_phys: (skip):
80
 **/
81
guint32
82
fu_struct_fdt_get_boot_cpuid_phys(const FuStructFdt *st)
83
1.92k
{
84
1.92k
    g_return_val_if_fail(st != NULL, 0x0);
85
1.92k
    return fu_memread_uint32(st->data + 28, G_BIG_ENDIAN);
86
1.92k
}
87
/**
88
 * fu_struct_fdt_get_size_dt_strings: (skip):
89
 **/
90
guint32
91
fu_struct_fdt_get_size_dt_strings(const FuStructFdt *st)
92
3.51k
{
93
3.51k
    g_return_val_if_fail(st != NULL, 0x0);
94
3.51k
    return fu_memread_uint32(st->data + 32, G_BIG_ENDIAN);
95
3.51k
}
96
/**
97
 * fu_struct_fdt_get_size_dt_struct: (skip):
98
 **/
99
guint32
100
fu_struct_fdt_get_size_dt_struct(const FuStructFdt *st)
101
4.97k
{
102
4.97k
    g_return_val_if_fail(st != NULL, 0x0);
103
4.97k
    return fu_memread_uint32(st->data + 36, G_BIG_ENDIAN);
104
4.97k
}
105
106
/* setters */
107
/**
108
 * fu_struct_fdt_set_magic: (skip):
109
 **/
110
static void
111
fu_struct_fdt_set_magic(FuStructFdt *st, guint32 value)
112
987
{
113
987
    g_return_if_fail(st != NULL);
114
987
    fu_memwrite_uint32(st->data + 0, value, G_BIG_ENDIAN);
115
987
}
116
/**
117
 * fu_struct_fdt_set_totalsize: (skip):
118
 **/
119
void
120
fu_struct_fdt_set_totalsize(FuStructFdt *st, guint32 value)
121
841
{
122
841
    g_return_if_fail(st != NULL);
123
841
    fu_memwrite_uint32(st->data + 4, value, G_BIG_ENDIAN);
124
841
}
125
/**
126
 * fu_struct_fdt_set_off_dt_struct: (skip):
127
 **/
128
void
129
fu_struct_fdt_set_off_dt_struct(FuStructFdt *st, guint32 value)
130
841
{
131
841
    g_return_if_fail(st != NULL);
132
841
    fu_memwrite_uint32(st->data + 8, value, G_BIG_ENDIAN);
133
841
}
134
/**
135
 * fu_struct_fdt_set_off_dt_strings: (skip):
136
 **/
137
void
138
fu_struct_fdt_set_off_dt_strings(FuStructFdt *st, guint32 value)
139
841
{
140
841
    g_return_if_fail(st != NULL);
141
841
    fu_memwrite_uint32(st->data + 12, value, G_BIG_ENDIAN);
142
841
}
143
/**
144
 * fu_struct_fdt_set_off_mem_rsvmap: (skip):
145
 **/
146
void
147
fu_struct_fdt_set_off_mem_rsvmap(FuStructFdt *st, guint32 value)
148
841
{
149
841
    g_return_if_fail(st != NULL);
150
841
    fu_memwrite_uint32(st->data + 16, value, G_BIG_ENDIAN);
151
841
}
152
/**
153
 * fu_struct_fdt_set_version: (skip):
154
 **/
155
void
156
fu_struct_fdt_set_version(FuStructFdt *st, guint32 value)
157
841
{
158
841
    g_return_if_fail(st != NULL);
159
841
    fu_memwrite_uint32(st->data + 20, value, G_BIG_ENDIAN);
160
841
}
161
/**
162
 * fu_struct_fdt_set_last_comp_version: (skip):
163
 **/
164
void
165
fu_struct_fdt_set_last_comp_version(FuStructFdt *st, guint32 value)
166
987
{
167
987
    g_return_if_fail(st != NULL);
168
987
    fu_memwrite_uint32(st->data + 24, value, G_BIG_ENDIAN);
169
987
}
170
/**
171
 * fu_struct_fdt_set_boot_cpuid_phys: (skip):
172
 **/
173
void
174
fu_struct_fdt_set_boot_cpuid_phys(FuStructFdt *st, guint32 value)
175
841
{
176
841
    g_return_if_fail(st != NULL);
177
841
    fu_memwrite_uint32(st->data + 28, value, G_BIG_ENDIAN);
178
841
}
179
/**
180
 * fu_struct_fdt_set_size_dt_strings: (skip):
181
 **/
182
void
183
fu_struct_fdt_set_size_dt_strings(FuStructFdt *st, guint32 value)
184
841
{
185
841
    g_return_if_fail(st != NULL);
186
841
    fu_memwrite_uint32(st->data + 32, value, G_BIG_ENDIAN);
187
841
}
188
/**
189
 * fu_struct_fdt_set_size_dt_struct: (skip):
190
 **/
191
void
192
fu_struct_fdt_set_size_dt_struct(FuStructFdt *st, guint32 value)
193
841
{
194
841
    g_return_if_fail(st != NULL);
195
841
    fu_memwrite_uint32(st->data + 36, value, G_BIG_ENDIAN);
196
841
}
197
/**
198
 * fu_struct_fdt_new: (skip):
199
 **/
200
FuStructFdt *
201
fu_struct_fdt_new(void)
202
987
{
203
987
    FuStructFdt *st = g_byte_array_sized_new(40);
204
987
    fu_byte_array_set_size(st, 40, 0x0);
205
987
    fu_struct_fdt_set_magic(st, 0xD00DFEED);
206
987
    fu_struct_fdt_set_last_comp_version(st, 2);
207
987
    return st;
208
987
}
209
/**
210
 * fu_struct_fdt_to_string: (skip):
211
 **/
212
static gchar *
213
fu_struct_fdt_to_string(const FuStructFdt *st)
214
0
{
215
0
    g_autoptr(GString) str = g_string_new("FuStructFdt:\n");
216
0
    g_return_val_if_fail(st != NULL, NULL);
217
0
    g_string_append_printf(str, "  totalsize: 0x%x\n",
218
0
                           (guint) fu_struct_fdt_get_totalsize(st));
219
0
    g_string_append_printf(str, "  off_dt_struct: 0x%x\n",
220
0
                           (guint) fu_struct_fdt_get_off_dt_struct(st));
221
0
    g_string_append_printf(str, "  off_dt_strings: 0x%x\n",
222
0
                           (guint) fu_struct_fdt_get_off_dt_strings(st));
223
0
    g_string_append_printf(str, "  off_mem_rsvmap: 0x%x\n",
224
0
                           (guint) fu_struct_fdt_get_off_mem_rsvmap(st));
225
0
    g_string_append_printf(str, "  version: 0x%x\n",
226
0
                           (guint) fu_struct_fdt_get_version(st));
227
0
    g_string_append_printf(str, "  last_comp_version: 0x%x\n",
228
0
                           (guint) fu_struct_fdt_get_last_comp_version(st));
229
0
    g_string_append_printf(str, "  boot_cpuid_phys: 0x%x\n",
230
0
                           (guint) fu_struct_fdt_get_boot_cpuid_phys(st));
231
0
    g_string_append_printf(str, "  size_dt_strings: 0x%x\n",
232
0
                           (guint) fu_struct_fdt_get_size_dt_strings(st));
233
0
    g_string_append_printf(str, "  size_dt_struct: 0x%x\n",
234
0
                           (guint) fu_struct_fdt_get_size_dt_struct(st));
235
0
    if (str->len > 0)
236
0
        g_string_set_size(str, str->len - 1);
237
0
    return g_string_free(g_steal_pointer(&str), FALSE);
238
0
}
239
static gboolean
240
fu_struct_fdt_validate_internal(FuStructFdt *st, GError **error)
241
9.90M
{
242
9.90M
    g_return_val_if_fail(st != NULL, FALSE);
243
9.90M
    if (fu_struct_fdt_get_magic(st) != 0xD00DFEED) {
244
9.90M
        g_set_error_literal(error,
245
9.90M
                            FWUPD_ERROR,
246
9.90M
                            FWUPD_ERROR_INVALID_DATA,
247
9.90M
                            "constant FuStructFdt.magic was not valid");
248
9.90M
        return FALSE;
249
9.90M
    }
250
3.94k
    return TRUE;
251
9.90M
}
252
/**
253
 * fu_struct_fdt_validate_stream: (skip):
254
 **/
255
gboolean
256
fu_struct_fdt_validate_stream(GInputStream *stream, gsize offset, GError **error)
257
9.90M
{
258
9.90M
    g_autoptr(GByteArray) st = NULL;
259
9.90M
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
260
9.90M
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
261
9.90M
    st = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
262
9.90M
    if (st == NULL) {
263
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
264
0
        return FALSE;
265
0
    }
266
9.90M
    if (st->len != 40) {
267
5.01k
        g_set_error(error,
268
5.01k
                    FWUPD_ERROR,
269
5.01k
                    FWUPD_ERROR_INVALID_DATA,
270
5.01k
                    "FuStructFdt requested 0x%x and got 0x%x",
271
5.01k
                    (guint) 40,
272
5.01k
                    (guint) st->len);
273
5.01k
        return FALSE;
274
5.01k
    }
275
9.90M
    return fu_struct_fdt_validate_internal(st, error);
276
9.90M
}
277
static gboolean
278
fu_struct_fdt_parse_internal(FuStructFdt *st, GError **error)
279
1.97k
{
280
1.97k
    if (!fu_struct_fdt_validate_internal(st, error))
281
0
        return FALSE;
282
1.97k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
283
0
        g_autofree gchar *str = fu_struct_fdt_to_string(st);
284
0
        g_debug("%s", str);
285
0
    }
286
1.97k
    return TRUE;
287
1.97k
}
288
/**
289
 * fu_struct_fdt_parse_stream: (skip):
290
 **/
291
FuStructFdt *
292
fu_struct_fdt_parse_stream(GInputStream *stream, gsize offset, GError **error)
293
1.97k
{
294
1.97k
    g_autoptr(GByteArray) st = NULL;
295
1.97k
    st = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
296
1.97k
    if (st == NULL) {
297
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
298
0
        return NULL;
299
0
    }
300
1.97k
    if (st->len != 40) {
301
0
        g_set_error(error,
302
0
                    FWUPD_ERROR,
303
0
                    FWUPD_ERROR_INVALID_DATA,
304
0
                    "FuStructFdt requested 0x%x and got 0x%x",
305
0
                    (guint) 40,
306
0
                    (guint) st->len);
307
0
        return NULL;
308
0
    }
309
1.97k
    if (!fu_struct_fdt_parse_internal(st, error))
310
0
        return NULL;
311
1.97k
    return g_steal_pointer(&st);
312
1.97k
}
313
/* getters */
314
/**
315
 * fu_struct_fdt_reserve_entry_get_address: (skip):
316
 **/
317
guint64
318
fu_struct_fdt_reserve_entry_get_address(const FuStructFdtReserveEntry *st)
319
307k
{
320
307k
    g_return_val_if_fail(st != NULL, 0x0);
321
307k
    return fu_memread_uint64(st->data + 0, G_BIG_ENDIAN);
322
307k
}
323
/**
324
 * fu_struct_fdt_reserve_entry_get_size: (skip):
325
 **/
326
guint64
327
fu_struct_fdt_reserve_entry_get_size(const FuStructFdtReserveEntry *st)
328
307k
{
329
307k
    g_return_val_if_fail(st != NULL, 0x0);
330
307k
    return fu_memread_uint64(st->data + 8, G_BIG_ENDIAN);
331
307k
}
332
333
/* setters */
334
/**
335
 * fu_struct_fdt_reserve_entry_set_address: (skip):
336
 **/
337
void
338
fu_struct_fdt_reserve_entry_set_address(FuStructFdtReserveEntry *st, guint64 value)
339
0
{
340
0
    g_return_if_fail(st != NULL);
341
0
    fu_memwrite_uint64(st->data + 0, value, G_BIG_ENDIAN);
342
0
}
343
/**
344
 * fu_struct_fdt_reserve_entry_set_size: (skip):
345
 **/
346
void
347
fu_struct_fdt_reserve_entry_set_size(FuStructFdtReserveEntry *st, guint64 value)
348
0
{
349
0
    g_return_if_fail(st != NULL);
350
0
    fu_memwrite_uint64(st->data + 8, value, G_BIG_ENDIAN);
351
0
}
352
/**
353
 * fu_struct_fdt_reserve_entry_new: (skip):
354
 **/
355
FuStructFdtReserveEntry *
356
fu_struct_fdt_reserve_entry_new(void)
357
987
{
358
987
    FuStructFdtReserveEntry *st = g_byte_array_sized_new(16);
359
987
    fu_byte_array_set_size(st, 16, 0x0);
360
987
    return st;
361
987
}
362
/**
363
 * fu_struct_fdt_reserve_entry_to_string: (skip):
364
 **/
365
static gchar *
366
fu_struct_fdt_reserve_entry_to_string(const FuStructFdtReserveEntry *st)
367
0
{
368
0
    g_autoptr(GString) str = g_string_new("FuStructFdtReserveEntry:\n");
369
0
    g_return_val_if_fail(st != NULL, NULL);
370
0
    g_string_append_printf(str, "  address: 0x%x\n",
371
0
                           (guint) fu_struct_fdt_reserve_entry_get_address(st));
372
0
    g_string_append_printf(str, "  size: 0x%x\n",
373
0
                           (guint) fu_struct_fdt_reserve_entry_get_size(st));
374
0
    if (str->len > 0)
375
0
        g_string_set_size(str, str->len - 1);
376
0
    return g_string_free(g_steal_pointer(&str), FALSE);
377
0
}
378
static gboolean
379
fu_struct_fdt_reserve_entry_validate_internal(FuStructFdtReserveEntry *st, GError **error)
380
307k
{
381
307k
    g_return_val_if_fail(st != NULL, FALSE);
382
307k
    return TRUE;
383
307k
}
384
static gboolean
385
fu_struct_fdt_reserve_entry_parse_internal(FuStructFdtReserveEntry *st, GError **error)
386
307k
{
387
307k
    if (!fu_struct_fdt_reserve_entry_validate_internal(st, error))
388
0
        return FALSE;
389
307k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
390
0
        g_autofree gchar *str = fu_struct_fdt_reserve_entry_to_string(st);
391
0
        g_debug("%s", str);
392
0
    }
393
307k
    return TRUE;
394
307k
}
395
/**
396
 * fu_struct_fdt_reserve_entry_parse_stream: (skip):
397
 **/
398
FuStructFdtReserveEntry *
399
fu_struct_fdt_reserve_entry_parse_stream(GInputStream *stream, gsize offset, GError **error)
400
307k
{
401
307k
    g_autoptr(GByteArray) st = NULL;
402
307k
    st = fu_input_stream_read_byte_array(stream, offset, 16, NULL, error);
403
307k
    if (st == NULL) {
404
0
        g_prefix_error(error, "FuStructFdtReserveEntry failed read of 0x%x: ", (guint) 16);
405
0
        return NULL;
406
0
    }
407
307k
    if (st->len != 16) {
408
136
        g_set_error(error,
409
136
                    FWUPD_ERROR,
410
136
                    FWUPD_ERROR_INVALID_DATA,
411
136
                    "FuStructFdtReserveEntry requested 0x%x and got 0x%x",
412
136
                    (guint) 16,
413
136
                    (guint) st->len);
414
136
        return NULL;
415
136
    }
416
307k
    if (!fu_struct_fdt_reserve_entry_parse_internal(st, error))
417
0
        return NULL;
418
307k
    return g_steal_pointer(&st);
419
307k
}
420
/* getters */
421
/**
422
 * fu_struct_fdt_prop_get_len: (skip):
423
 **/
424
guint32
425
fu_struct_fdt_prop_get_len(const FuStructFdtProp *st)
426
24.1k
{
427
24.1k
    g_return_val_if_fail(st != NULL, 0x0);
428
24.1k
    return fu_memread_uint32(st->data + 0, G_BIG_ENDIAN);
429
24.1k
}
430
/**
431
 * fu_struct_fdt_prop_get_nameoff: (skip):
432
 **/
433
guint32
434
fu_struct_fdt_prop_get_nameoff(const FuStructFdtProp *st)
435
24.1k
{
436
24.1k
    g_return_val_if_fail(st != NULL, 0x0);
437
24.1k
    return fu_memread_uint32(st->data + 4, G_BIG_ENDIAN);
438
24.1k
}
439
440
/* setters */
441
/**
442
 * fu_struct_fdt_prop_set_len: (skip):
443
 **/
444
void
445
fu_struct_fdt_prop_set_len(FuStructFdtProp *st, guint32 value)
446
12.6k
{
447
12.6k
    g_return_if_fail(st != NULL);
448
12.6k
    fu_memwrite_uint32(st->data + 0, value, G_BIG_ENDIAN);
449
12.6k
}
450
/**
451
 * fu_struct_fdt_prop_set_nameoff: (skip):
452
 **/
453
void
454
fu_struct_fdt_prop_set_nameoff(FuStructFdtProp *st, guint32 value)
455
12.6k
{
456
12.6k
    g_return_if_fail(st != NULL);
457
12.6k
    fu_memwrite_uint32(st->data + 4, value, G_BIG_ENDIAN);
458
12.6k
}
459
/**
460
 * fu_struct_fdt_prop_new: (skip):
461
 **/
462
FuStructFdtProp *
463
fu_struct_fdt_prop_new(void)
464
12.6k
{
465
12.6k
    FuStructFdtProp *st = g_byte_array_sized_new(8);
466
12.6k
    fu_byte_array_set_size(st, 8, 0x0);
467
12.6k
    return st;
468
12.6k
}
469
/**
470
 * fu_struct_fdt_prop_to_string: (skip):
471
 **/
472
static gchar *
473
fu_struct_fdt_prop_to_string(const FuStructFdtProp *st)
474
0
{
475
0
    g_autoptr(GString) str = g_string_new("FuStructFdtProp:\n");
476
0
    g_return_val_if_fail(st != NULL, NULL);
477
0
    g_string_append_printf(str, "  len: 0x%x\n",
478
0
                           (guint) fu_struct_fdt_prop_get_len(st));
479
0
    g_string_append_printf(str, "  nameoff: 0x%x\n",
480
0
                           (guint) fu_struct_fdt_prop_get_nameoff(st));
481
0
    if (str->len > 0)
482
0
        g_string_set_size(str, str->len - 1);
483
0
    return g_string_free(g_steal_pointer(&str), FALSE);
484
0
}
485
static gboolean
486
fu_struct_fdt_prop_validate_internal(FuStructFdtProp *st, GError **error)
487
24.1k
{
488
24.1k
    g_return_val_if_fail(st != NULL, FALSE);
489
24.1k
    return TRUE;
490
24.1k
}
491
static gboolean
492
fu_struct_fdt_prop_parse_internal(FuStructFdtProp *st, GError **error)
493
24.1k
{
494
24.1k
    if (!fu_struct_fdt_prop_validate_internal(st, error))
495
0
        return FALSE;
496
24.1k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
497
0
        g_autofree gchar *str = fu_struct_fdt_prop_to_string(st);
498
0
        g_debug("%s", str);
499
0
    }
500
24.1k
    return TRUE;
501
24.1k
}
502
503
/**
504
 * fu_struct_fdt_prop_parse: (skip):
505
 **/
506
FuStructFdtProp *
507
fu_struct_fdt_prop_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
508
24.1k
{
509
24.1k
    g_autoptr(GByteArray) st = g_byte_array_new();
510
24.1k
    g_return_val_if_fail(buf != NULL, NULL);
511
24.1k
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
512
24.1k
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
513
6
        g_prefix_error(error, "invalid struct FuStructFdtProp: ");
514
6
        return NULL;
515
6
    }
516
24.1k
    g_byte_array_append(st, buf + offset, 8);
517
24.1k
    if (!fu_struct_fdt_prop_parse_internal(st, error))
518
0
        return NULL;
519
24.1k
    return g_steal_pointer(&st);
520
24.1k
}