Coverage Report

Created: 2025-07-11 06:31

/work/fu-elf-struct.c
Line
Count
Source (jump to first uncovered line)
1
/* auto-generated, do not modify */
2
#include "config.h"
3
4
#include "fu-elf-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
static const gchar *
15
fu_elf_file_header_type_to_string(FuElfFileHeaderType val)
16
0
{
17
0
    if (val == FU_ELF_FILE_HEADER_TYPE_NONE)
18
0
        return "none";
19
0
    if (val == FU_ELF_FILE_HEADER_TYPE_REL)
20
0
        return "rel";
21
0
    if (val == FU_ELF_FILE_HEADER_TYPE_EXEC)
22
0
        return "exec";
23
0
    if (val == FU_ELF_FILE_HEADER_TYPE_DYN)
24
0
        return "dyn";
25
0
    if (val == FU_ELF_FILE_HEADER_TYPE_CORE)
26
0
        return "core";
27
0
    return NULL;
28
0
}
29
30
const gchar *
31
fu_elf_section_header_type_to_string(FuElfSectionHeaderType val)
32
133
{
33
133
    if (val == FU_ELF_SECTION_HEADER_TYPE_NULL)
34
5
        return "null";
35
128
    if (val == FU_ELF_SECTION_HEADER_TYPE_PROGBITS)
36
1
        return "progbits";
37
127
    if (val == FU_ELF_SECTION_HEADER_TYPE_SYMTAB)
38
1
        return "symtab";
39
126
    if (val == FU_ELF_SECTION_HEADER_TYPE_STRTAB)
40
0
        return "strtab";
41
126
    if (val == FU_ELF_SECTION_HEADER_TYPE_RELA)
42
1
        return "rela";
43
125
    if (val == FU_ELF_SECTION_HEADER_TYPE_HASH)
44
1
        return "hash";
45
124
    if (val == FU_ELF_SECTION_HEADER_TYPE_DYNAMIC)
46
1
        return "dynamic";
47
123
    if (val == FU_ELF_SECTION_HEADER_TYPE_NOTE)
48
1
        return "note";
49
122
    if (val == FU_ELF_SECTION_HEADER_TYPE_NOBITS)
50
1
        return "nobits";
51
121
    if (val == FU_ELF_SECTION_HEADER_TYPE_REL)
52
1
        return "rel";
53
120
    if (val == FU_ELF_SECTION_HEADER_TYPE_SHLIB)
54
1
        return "shlib";
55
119
    if (val == FU_ELF_SECTION_HEADER_TYPE_DYNSYM)
56
1
        return "dynsym";
57
118
    if (val == FU_ELF_SECTION_HEADER_TYPE_INIT_ARRAY)
58
1
        return "init-array";
59
117
    if (val == FU_ELF_SECTION_HEADER_TYPE_FINI_ARRAY)
60
1
        return "fini-array";
61
116
    if (val == FU_ELF_SECTION_HEADER_TYPE_PREINIT_ARRAY)
62
1
        return "preinit-array";
63
115
    if (val == FU_ELF_SECTION_HEADER_TYPE_GROUP)
64
1
        return "group";
65
114
    if (val == FU_ELF_SECTION_HEADER_TYPE_SYMTAB_SHNDX)
66
1
        return "symtab-shndx";
67
113
    if (val == FU_ELF_SECTION_HEADER_TYPE_NUM)
68
1
        return "num";
69
112
    return NULL;
70
113
}
71
/* getters */
72
/**
73
 * fu_struct_elf_file_header64le_get_ei_magic: (skip):
74
 **/
75
static gchar *
76
fu_struct_elf_file_header64le_get_ei_magic(const FuStructElfFileHeader64le *st)
77
4.08M
{
78
4.08M
    g_return_val_if_fail(st != NULL, NULL);
79
4.08M
    return fu_memstrsafe(st->data, st->len, 0, 4, NULL);
80
4.08M
}
81
/**
82
 * fu_struct_elf_file_header64le_get_ei_class: (skip):
83
 **/
84
static guint8
85
fu_struct_elf_file_header64le_get_ei_class(const FuStructElfFileHeader64le *st)
86
3.51k
{
87
3.51k
    g_return_val_if_fail(st != NULL, 0x0);
88
3.51k
    return st->data[4];
89
3.51k
}
90
/**
91
 * fu_struct_elf_file_header64le_get_ei_data: (skip):
92
 **/
93
static guint8
94
fu_struct_elf_file_header64le_get_ei_data(const FuStructElfFileHeader64le *st)
95
3.28k
{
96
3.28k
    g_return_val_if_fail(st != NULL, 0x0);
97
3.28k
    return st->data[5];
98
3.28k
}
99
/**
100
 * fu_struct_elf_file_header64le_get_ei_version: (skip):
101
 **/
102
static guint8
103
fu_struct_elf_file_header64le_get_ei_version(const FuStructElfFileHeader64le *st)
104
2.95k
{
105
2.95k
    g_return_val_if_fail(st != NULL, 0x0);
106
2.95k
    return st->data[6];
107
2.95k
}
108
/**
109
 * fu_struct_elf_file_header64le_get_ei_osabi: (skip):
110
 **/
111
guint8
112
fu_struct_elf_file_header64le_get_ei_osabi(const FuStructElfFileHeader64le *st)
113
0
{
114
0
    g_return_val_if_fail(st != NULL, 0x0);
115
0
    return st->data[7];
116
0
}
117
/**
118
 * fu_struct_elf_file_header64le_get_ei_abiversion: (skip):
119
 **/
120
guint8
121
fu_struct_elf_file_header64le_get_ei_abiversion(const FuStructElfFileHeader64le *st)
122
0
{
123
0
    g_return_val_if_fail(st != NULL, 0x0);
124
0
    return st->data[8];
125
0
}
126
/**
127
 * fu_struct_elf_file_header64le_get_type: (skip):
128
 **/
129
FuElfFileHeaderType
130
fu_struct_elf_file_header64le_get_type(const FuStructElfFileHeader64le *st)
131
0
{
132
0
    g_return_val_if_fail(st != NULL, 0x0);
133
0
    return fu_memread_uint16(st->data + 16, G_LITTLE_ENDIAN);
134
0
}
135
/**
136
 * fu_struct_elf_file_header64le_get_machine: (skip):
137
 **/
138
guint16
139
fu_struct_elf_file_header64le_get_machine(const FuStructElfFileHeader64le *st)
140
0
{
141
0
    g_return_val_if_fail(st != NULL, 0x0);
142
0
    return fu_memread_uint16(st->data + 18, G_LITTLE_ENDIAN);
143
0
}
144
/**
145
 * fu_struct_elf_file_header64le_get_version: (skip):
146
 **/
147
static guint32
148
fu_struct_elf_file_header64le_get_version(const FuStructElfFileHeader64le *st)
149
3.28k
{
150
3.28k
    g_return_val_if_fail(st != NULL, 0x0);
151
3.28k
    return fu_memread_uint32(st->data + 20, G_LITTLE_ENDIAN);
152
3.28k
}
153
/**
154
 * fu_struct_elf_file_header64le_get_entry: (skip):
155
 **/
156
guint64
157
fu_struct_elf_file_header64le_get_entry(const FuStructElfFileHeader64le *st)
158
0
{
159
0
    g_return_val_if_fail(st != NULL, 0x0);
160
0
    return fu_memread_uint64(st->data + 24, G_LITTLE_ENDIAN);
161
0
}
162
/**
163
 * fu_struct_elf_file_header64le_get_phoff: (skip):
164
 **/
165
guint64
166
fu_struct_elf_file_header64le_get_phoff(const FuStructElfFileHeader64le *st)
167
988
{
168
988
    g_return_val_if_fail(st != NULL, 0x0);
169
988
    return fu_memread_uint64(st->data + 32, G_LITTLE_ENDIAN);
170
988
}
171
/**
172
 * fu_struct_elf_file_header64le_get_shoff: (skip):
173
 **/
174
guint64
175
fu_struct_elf_file_header64le_get_shoff(const FuStructElfFileHeader64le *st)
176
851
{
177
851
    g_return_val_if_fail(st != NULL, 0x0);
178
851
    return fu_memread_uint64(st->data + 40, G_LITTLE_ENDIAN);
179
851
}
180
/**
181
 * fu_struct_elf_file_header64le_get_flags: (skip):
182
 **/
183
guint32
184
fu_struct_elf_file_header64le_get_flags(const FuStructElfFileHeader64le *st)
185
0
{
186
0
    g_return_val_if_fail(st != NULL, 0x0);
187
0
    return fu_memread_uint32(st->data + 48, G_LITTLE_ENDIAN);
188
0
}
189
/**
190
 * fu_struct_elf_file_header64le_get_ehsize: (skip):
191
 **/
192
guint16
193
fu_struct_elf_file_header64le_get_ehsize(const FuStructElfFileHeader64le *st)
194
0
{
195
0
    g_return_val_if_fail(st != NULL, 0x0);
196
0
    return fu_memread_uint16(st->data + 52, G_LITTLE_ENDIAN);
197
0
}
198
/**
199
 * fu_struct_elf_file_header64le_get_phentsize: (skip):
200
 **/
201
guint16
202
fu_struct_elf_file_header64le_get_phentsize(const FuStructElfFileHeader64le *st)
203
988
{
204
988
    g_return_val_if_fail(st != NULL, 0x0);
205
988
    return fu_memread_uint16(st->data + 54, G_LITTLE_ENDIAN);
206
988
}
207
/**
208
 * fu_struct_elf_file_header64le_get_phnum: (skip):
209
 **/
210
guint16
211
fu_struct_elf_file_header64le_get_phnum(const FuStructElfFileHeader64le *st)
212
988
{
213
988
    g_return_val_if_fail(st != NULL, 0x0);
214
988
    return fu_memread_uint16(st->data + 56, G_LITTLE_ENDIAN);
215
988
}
216
/**
217
 * fu_struct_elf_file_header64le_get_shentsize: (skip):
218
 **/
219
guint16
220
fu_struct_elf_file_header64le_get_shentsize(const FuStructElfFileHeader64le *st)
221
11.7M
{
222
11.7M
    g_return_val_if_fail(st != NULL, 0x0);
223
11.7M
    return fu_memread_uint16(st->data + 58, G_LITTLE_ENDIAN);
224
11.7M
}
225
/**
226
 * fu_struct_elf_file_header64le_get_shnum: (skip):
227
 **/
228
guint16
229
fu_struct_elf_file_header64le_get_shnum(const FuStructElfFileHeader64le *st)
230
851
{
231
851
    g_return_val_if_fail(st != NULL, 0x0);
232
851
    return fu_memread_uint16(st->data + 60, G_LITTLE_ENDIAN);
233
851
}
234
/**
235
 * fu_struct_elf_file_header64le_get_shstrndx: (skip):
236
 **/
237
guint16
238
fu_struct_elf_file_header64le_get_shstrndx(const FuStructElfFileHeader64le *st)
239
4.07M
{
240
4.07M
    g_return_val_if_fail(st != NULL, 0x0);
241
4.07M
    return fu_memread_uint16(st->data + 62, G_LITTLE_ENDIAN);
242
4.07M
}
243
244
/* setters */
245
/**
246
 * fu_struct_elf_file_header64le_set_ei_magic: (skip):
247
 **/
248
static gboolean
249
fu_struct_elf_file_header64le_set_ei_magic(FuStructElfFileHeader64le *st, const gchar *value, GError **error)
250
236
{
251
236
    gsize len;
252
236
    g_return_val_if_fail(st != NULL, FALSE);
253
236
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
254
236
    if (value == NULL) {
255
0
        memset(st->data + 0, 0x0, 4);
256
0
        return TRUE;
257
0
    }
258
236
    len = strlen(value);
259
236
    if (len > 4) {
260
0
        g_set_error(error,
261
0
                    FWUPD_ERROR,
262
0
                    FWUPD_ERROR_INVALID_DATA,
263
0
                    "string '%s' (0x%x bytes) does not fit in FuStructElfFileHeader64le.ei_magic (0x%x bytes)",
264
0
                    value, (guint) len, (guint) 4);
265
0
        return FALSE;
266
0
    }
267
236
    return fu_memcpy_safe(st->data, st->len, 0, (const guint8 *)value, len, 0x0, len, error);
268
236
}
269
/**
270
 * fu_struct_elf_file_header64le_set_ei_class: (skip):
271
 **/
272
static void
273
fu_struct_elf_file_header64le_set_ei_class(FuStructElfFileHeader64le *st, guint8 value)
274
236
{
275
236
    g_return_if_fail(st != NULL);
276
236
    st->data[4] = value;
277
236
}
278
/**
279
 * fu_struct_elf_file_header64le_set_ei_data: (skip):
280
 **/
281
static void
282
fu_struct_elf_file_header64le_set_ei_data(FuStructElfFileHeader64le *st, guint8 value)
283
236
{
284
236
    g_return_if_fail(st != NULL);
285
236
    st->data[5] = value;
286
236
}
287
/**
288
 * fu_struct_elf_file_header64le_set_ei_version: (skip):
289
 **/
290
static void
291
fu_struct_elf_file_header64le_set_ei_version(FuStructElfFileHeader64le *st, guint8 value)
292
236
{
293
236
    g_return_if_fail(st != NULL);
294
236
    st->data[6] = value;
295
236
}
296
/**
297
 * fu_struct_elf_file_header64le_set_ei_osabi: (skip):
298
 **/
299
void
300
fu_struct_elf_file_header64le_set_ei_osabi(FuStructElfFileHeader64le *st, guint8 value)
301
236
{
302
236
    g_return_if_fail(st != NULL);
303
236
    st->data[7] = value;
304
236
}
305
/**
306
 * fu_struct_elf_file_header64le_set_ei_abiversion: (skip):
307
 **/
308
void
309
fu_struct_elf_file_header64le_set_ei_abiversion(FuStructElfFileHeader64le *st, guint8 value)
310
0
{
311
0
    g_return_if_fail(st != NULL);
312
0
    st->data[8] = value;
313
0
}
314
/**
315
 * fu_struct_elf_file_header64le_set_type: (skip):
316
 **/
317
void
318
fu_struct_elf_file_header64le_set_type(FuStructElfFileHeader64le *st, FuElfFileHeaderType value)
319
0
{
320
0
    g_return_if_fail(st != NULL);
321
0
    fu_memwrite_uint16(st->data + 16, value, G_LITTLE_ENDIAN);
322
0
}
323
/**
324
 * fu_struct_elf_file_header64le_set_machine: (skip):
325
 **/
326
void
327
fu_struct_elf_file_header64le_set_machine(FuStructElfFileHeader64le *st, guint16 value)
328
0
{
329
0
    g_return_if_fail(st != NULL);
330
0
    fu_memwrite_uint16(st->data + 18, value, G_LITTLE_ENDIAN);
331
0
}
332
/**
333
 * fu_struct_elf_file_header64le_set_version: (skip):
334
 **/
335
static void
336
fu_struct_elf_file_header64le_set_version(FuStructElfFileHeader64le *st, guint32 value)
337
236
{
338
236
    g_return_if_fail(st != NULL);
339
236
    fu_memwrite_uint32(st->data + 20, value, G_LITTLE_ENDIAN);
340
236
}
341
/**
342
 * fu_struct_elf_file_header64le_set_entry: (skip):
343
 **/
344
void
345
fu_struct_elf_file_header64le_set_entry(FuStructElfFileHeader64le *st, guint64 value)
346
131
{
347
131
    g_return_if_fail(st != NULL);
348
131
    fu_memwrite_uint64(st->data + 24, value, G_LITTLE_ENDIAN);
349
131
}
350
/**
351
 * fu_struct_elf_file_header64le_set_phoff: (skip):
352
 **/
353
void
354
fu_struct_elf_file_header64le_set_phoff(FuStructElfFileHeader64le *st, guint64 value)
355
236
{
356
236
    g_return_if_fail(st != NULL);
357
236
    fu_memwrite_uint64(st->data + 32, value, G_LITTLE_ENDIAN);
358
236
}
359
/**
360
 * fu_struct_elf_file_header64le_set_shoff: (skip):
361
 **/
362
void
363
fu_struct_elf_file_header64le_set_shoff(FuStructElfFileHeader64le *st, guint64 value)
364
131
{
365
131
    g_return_if_fail(st != NULL);
366
131
    fu_memwrite_uint64(st->data + 40, value, G_LITTLE_ENDIAN);
367
131
}
368
/**
369
 * fu_struct_elf_file_header64le_set_flags: (skip):
370
 **/
371
void
372
fu_struct_elf_file_header64le_set_flags(FuStructElfFileHeader64le *st, guint32 value)
373
0
{
374
0
    g_return_if_fail(st != NULL);
375
0
    fu_memwrite_uint32(st->data + 48, value, G_LITTLE_ENDIAN);
376
0
}
377
/**
378
 * fu_struct_elf_file_header64le_set_ehsize: (skip):
379
 **/
380
void
381
fu_struct_elf_file_header64le_set_ehsize(FuStructElfFileHeader64le *st, guint16 value)
382
236
{
383
236
    g_return_if_fail(st != NULL);
384
236
    fu_memwrite_uint16(st->data + 52, value, G_LITTLE_ENDIAN);
385
236
}
386
/**
387
 * fu_struct_elf_file_header64le_set_phentsize: (skip):
388
 **/
389
void
390
fu_struct_elf_file_header64le_set_phentsize(FuStructElfFileHeader64le *st, guint16 value)
391
131
{
392
131
    g_return_if_fail(st != NULL);
393
131
    fu_memwrite_uint16(st->data + 54, value, G_LITTLE_ENDIAN);
394
131
}
395
/**
396
 * fu_struct_elf_file_header64le_set_phnum: (skip):
397
 **/
398
void
399
fu_struct_elf_file_header64le_set_phnum(FuStructElfFileHeader64le *st, guint16 value)
400
131
{
401
131
    g_return_if_fail(st != NULL);
402
131
    fu_memwrite_uint16(st->data + 56, value, G_LITTLE_ENDIAN);
403
131
}
404
/**
405
 * fu_struct_elf_file_header64le_set_shentsize: (skip):
406
 **/
407
void
408
fu_struct_elf_file_header64le_set_shentsize(FuStructElfFileHeader64le *st, guint16 value)
409
131
{
410
131
    g_return_if_fail(st != NULL);
411
131
    fu_memwrite_uint16(st->data + 58, value, G_LITTLE_ENDIAN);
412
131
}
413
/**
414
 * fu_struct_elf_file_header64le_set_shnum: (skip):
415
 **/
416
void
417
fu_struct_elf_file_header64le_set_shnum(FuStructElfFileHeader64le *st, guint16 value)
418
131
{
419
131
    g_return_if_fail(st != NULL);
420
131
    fu_memwrite_uint16(st->data + 60, value, G_LITTLE_ENDIAN);
421
131
}
422
/**
423
 * fu_struct_elf_file_header64le_set_shstrndx: (skip):
424
 **/
425
void
426
fu_struct_elf_file_header64le_set_shstrndx(FuStructElfFileHeader64le *st, guint16 value)
427
131
{
428
131
    g_return_if_fail(st != NULL);
429
131
    fu_memwrite_uint16(st->data + 62, value, G_LITTLE_ENDIAN);
430
131
}
431
/**
432
 * fu_struct_elf_file_header64le_new: (skip):
433
 **/
434
FuStructElfFileHeader64le *
435
fu_struct_elf_file_header64le_new(void)
436
236
{
437
236
    FuStructElfFileHeader64le *st = g_byte_array_sized_new(64);
438
236
    fu_byte_array_set_size(st, 64, 0x0);
439
236
    fu_struct_elf_file_header64le_set_ei_magic(st, "\x7F\x45\x4C\x46", NULL);
440
236
    fu_struct_elf_file_header64le_set_ei_class(st, 0x2);
441
236
    fu_struct_elf_file_header64le_set_ei_data(st, 0x1);
442
236
    fu_struct_elf_file_header64le_set_ei_version(st, 0x1);
443
236
    fu_struct_elf_file_header64le_set_ei_osabi(st, 0x3);
444
236
    memcpy(st->data + 0x9, "\x00\x00\x00\x00\x00\x00\x00", 7); /* nocheck:blocked */
445
236
    fu_struct_elf_file_header64le_set_version(st, 0x1);
446
236
    fu_struct_elf_file_header64le_set_phoff(st, 64);
447
236
    fu_struct_elf_file_header64le_set_ehsize(st, 64);
448
236
    return st;
449
236
}
450
/**
451
 * fu_struct_elf_file_header64le_to_string: (skip):
452
 **/
453
static gchar *
454
fu_struct_elf_file_header64le_to_string(const FuStructElfFileHeader64le *st)
455
0
{
456
0
    g_autoptr(GString) str = g_string_new("FuStructElfFileHeader64le:\n");
457
0
    g_return_val_if_fail(st != NULL, NULL);
458
0
    g_string_append_printf(str, "  ei_osabi: 0x%x\n",
459
0
                           (guint) fu_struct_elf_file_header64le_get_ei_osabi(st));
460
0
    g_string_append_printf(str, "  ei_abiversion: 0x%x\n",
461
0
                           (guint) fu_struct_elf_file_header64le_get_ei_abiversion(st));
462
0
    {
463
0
        const gchar *tmp = fu_elf_file_header_type_to_string(fu_struct_elf_file_header64le_get_type(st));
464
0
        if (tmp != NULL) {
465
0
            g_string_append_printf(str, "  type: 0x%x [%s]\n", (guint) fu_struct_elf_file_header64le_get_type(st), tmp);
466
0
        } else {
467
0
            g_string_append_printf(str, "  type: 0x%x\n", (guint) fu_struct_elf_file_header64le_get_type(st));
468
0
        }
469
0
    }
470
0
    g_string_append_printf(str, "  machine: 0x%x\n",
471
0
                           (guint) fu_struct_elf_file_header64le_get_machine(st));
472
0
    g_string_append_printf(str, "  entry: 0x%x\n",
473
0
                           (guint) fu_struct_elf_file_header64le_get_entry(st));
474
0
    g_string_append_printf(str, "  phoff: 0x%x\n",
475
0
                           (guint) fu_struct_elf_file_header64le_get_phoff(st));
476
0
    g_string_append_printf(str, "  shoff: 0x%x\n",
477
0
                           (guint) fu_struct_elf_file_header64le_get_shoff(st));
478
0
    g_string_append_printf(str, "  flags: 0x%x\n",
479
0
                           (guint) fu_struct_elf_file_header64le_get_flags(st));
480
0
    g_string_append_printf(str, "  ehsize: 0x%x\n",
481
0
                           (guint) fu_struct_elf_file_header64le_get_ehsize(st));
482
0
    g_string_append_printf(str, "  phentsize: 0x%x\n",
483
0
                           (guint) fu_struct_elf_file_header64le_get_phentsize(st));
484
0
    g_string_append_printf(str, "  phnum: 0x%x\n",
485
0
                           (guint) fu_struct_elf_file_header64le_get_phnum(st));
486
0
    g_string_append_printf(str, "  shentsize: 0x%x\n",
487
0
                           (guint) fu_struct_elf_file_header64le_get_shentsize(st));
488
0
    g_string_append_printf(str, "  shnum: 0x%x\n",
489
0
                           (guint) fu_struct_elf_file_header64le_get_shnum(st));
490
0
    g_string_append_printf(str, "  shstrndx: 0x%x\n",
491
0
                           (guint) fu_struct_elf_file_header64le_get_shstrndx(st));
492
0
    if (str->len > 0)
493
0
        g_string_set_size(str, str->len - 1);
494
0
    return g_string_free(g_steal_pointer(&str), FALSE);
495
0
}
496
static gboolean
497
fu_struct_elf_file_header64le_validate_internal(FuStructElfFileHeader64le *st, GError **error)
498
4.09M
{
499
4.09M
    g_return_val_if_fail(st != NULL, FALSE);
500
4.09M
    if (strncmp((const gchar *) (st->data + 0), "\x7F\x45\x4C\x46", 4) != 0) {
501
4.08M
        g_autofree gchar *str = fu_struct_elf_file_header64le_get_ei_magic(st);
502
4.08M
        g_set_error(error,
503
4.08M
                    FWUPD_ERROR,
504
4.08M
                    FWUPD_ERROR_INVALID_DATA,
505
4.08M
                    "constant FuStructElfFileHeader64le.ei_magic was not valid, "
506
4.08M
                    "expected '\x7F\x45\x4C\x46' and got '%s'",
507
4.08M
                    str);
508
4.08M
        return FALSE;
509
4.08M
    }
510
3.51k
    if (fu_struct_elf_file_header64le_get_ei_class(st) != 0x2) {
511
228
        g_set_error_literal(error,
512
228
                            FWUPD_ERROR,
513
228
                            FWUPD_ERROR_INVALID_DATA,
514
228
                            "constant FuStructElfFileHeader64le.ei_class was not valid");
515
228
        return FALSE;
516
228
    }
517
3.28k
    if (fu_struct_elf_file_header64le_get_ei_data(st) != 0x1) {
518
331
        g_set_error_literal(error,
519
331
                            FWUPD_ERROR,
520
331
                            FWUPD_ERROR_INVALID_DATA,
521
331
                            "constant FuStructElfFileHeader64le.ei_data was not valid");
522
331
        return FALSE;
523
331
    }
524
2.95k
    if (fu_struct_elf_file_header64le_get_ei_version(st) != 0x1) {
525
321
        g_set_error_literal(error,
526
321
                            FWUPD_ERROR,
527
321
                            FWUPD_ERROR_INVALID_DATA,
528
321
                            "constant FuStructElfFileHeader64le.ei_version was not valid");
529
321
        return FALSE;
530
321
    }
531
2.63k
    if (fu_struct_elf_file_header64le_get_version(st) != 0x1) {
532
655
        g_set_error(error,
533
655
                    FWUPD_ERROR,
534
655
                    FWUPD_ERROR_INVALID_DATA,
535
655
                    "constant FuStructElfFileHeader64le.version was not valid, "
536
655
                    "expected 0x%x and got 0x%x",
537
655
                    (guint) 0x1,
538
655
                    (guint) fu_struct_elf_file_header64le_get_version(st));
539
655
        return FALSE;
540
655
    }
541
1.97k
    return TRUE;
542
2.63k
}
543
/**
544
 * fu_struct_elf_file_header64le_validate_stream: (skip):
545
 **/
546
gboolean
547
fu_struct_elf_file_header64le_validate_stream(GInputStream *stream, gsize offset, GError **error)
548
4.10M
{
549
4.10M
    g_autoptr(GByteArray) st = NULL;
550
4.10M
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
551
4.10M
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
552
4.10M
    st = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
553
4.10M
    if (st == NULL) {
554
0
        g_prefix_error(error, "FuStructElfFileHeader64le failed read of 0x%x: ", (guint) 64);
555
0
        return FALSE;
556
0
    }
557
4.10M
    if (st->len != 64) {
558
12.3k
        g_set_error(error,
559
12.3k
                    FWUPD_ERROR,
560
12.3k
                    FWUPD_ERROR_INVALID_DATA,
561
12.3k
                    "FuStructElfFileHeader64le requested 0x%x and got 0x%x",
562
12.3k
                    (guint) 64,
563
12.3k
                    (guint) st->len);
564
12.3k
        return FALSE;
565
12.3k
    }
566
4.09M
    return fu_struct_elf_file_header64le_validate_internal(st, error);
567
4.10M
}
568
static gboolean
569
fu_struct_elf_file_header64le_parse_internal(FuStructElfFileHeader64le *st, GError **error)
570
988
{
571
988
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
572
0
        g_autofree gchar *str = fu_struct_elf_file_header64le_to_string(st);
573
0
        g_debug("%s", str);
574
0
    }
575
988
    if (!fu_struct_elf_file_header64le_validate_internal(st, error))
576
0
        return FALSE;
577
988
    return TRUE;
578
988
}
579
/**
580
 * fu_struct_elf_file_header64le_parse_stream: (skip):
581
 **/
582
FuStructElfFileHeader64le *
583
fu_struct_elf_file_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
584
988
{
585
988
    g_autoptr(GByteArray) st = NULL;
586
988
    st = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
587
988
    if (st == NULL) {
588
0
        g_prefix_error(error, "FuStructElfFileHeader64le failed read of 0x%x: ", (guint) 64);
589
0
        return NULL;
590
0
    }
591
988
    if (st->len != 64) {
592
0
        g_set_error(error,
593
0
                    FWUPD_ERROR,
594
0
                    FWUPD_ERROR_INVALID_DATA,
595
0
                    "FuStructElfFileHeader64le requested 0x%x and got 0x%x",
596
0
                    (guint) 64,
597
0
                    (guint) st->len);
598
0
        return NULL;
599
0
    }
600
988
    if (!fu_struct_elf_file_header64le_parse_internal(st, error))
601
0
        return NULL;
602
988
    return g_steal_pointer(&st);
603
988
}
604
/* getters */
605
/**
606
 * fu_struct_elf_program_header64le_get_flags: (skip):
607
 **/
608
guint32
609
fu_struct_elf_program_header64le_get_flags(const FuStructElfProgramHeader64le *st)
610
0
{
611
0
    g_return_val_if_fail(st != NULL, 0x0);
612
0
    return fu_memread_uint32(st->data + 0, G_LITTLE_ENDIAN);
613
0
}
614
/**
615
 * fu_struct_elf_program_header64le_get_offset: (skip):
616
 **/
617
guint64
618
fu_struct_elf_program_header64le_get_offset(const FuStructElfProgramHeader64le *st)
619
0
{
620
0
    g_return_val_if_fail(st != NULL, 0x0);
621
0
    return fu_memread_uint64(st->data + 4, G_LITTLE_ENDIAN);
622
0
}
623
/**
624
 * fu_struct_elf_program_header64le_get_vaddr: (skip):
625
 **/
626
guint64
627
fu_struct_elf_program_header64le_get_vaddr(const FuStructElfProgramHeader64le *st)
628
0
{
629
0
    g_return_val_if_fail(st != NULL, 0x0);
630
0
    return fu_memread_uint64(st->data + 12, G_LITTLE_ENDIAN);
631
0
}
632
/**
633
 * fu_struct_elf_program_header64le_get_paddr: (skip):
634
 **/
635
guint64
636
fu_struct_elf_program_header64le_get_paddr(const FuStructElfProgramHeader64le *st)
637
0
{
638
0
    g_return_val_if_fail(st != NULL, 0x0);
639
0
    return fu_memread_uint64(st->data + 20, G_LITTLE_ENDIAN);
640
0
}
641
/**
642
 * fu_struct_elf_program_header64le_get_filesz: (skip):
643
 **/
644
guint64
645
fu_struct_elf_program_header64le_get_filesz(const FuStructElfProgramHeader64le *st)
646
0
{
647
0
    g_return_val_if_fail(st != NULL, 0x0);
648
0
    return fu_memread_uint64(st->data + 28, G_LITTLE_ENDIAN);
649
0
}
650
/**
651
 * fu_struct_elf_program_header64le_get_memsz: (skip):
652
 **/
653
guint64
654
fu_struct_elf_program_header64le_get_memsz(const FuStructElfProgramHeader64le *st)
655
0
{
656
0
    g_return_val_if_fail(st != NULL, 0x0);
657
0
    return fu_memread_uint64(st->data + 36, G_LITTLE_ENDIAN);
658
0
}
659
/**
660
 * fu_struct_elf_program_header64le_get_flags2: (skip):
661
 **/
662
guint32
663
fu_struct_elf_program_header64le_get_flags2(const FuStructElfProgramHeader64le *st)
664
0
{
665
0
    g_return_val_if_fail(st != NULL, 0x0);
666
0
    return fu_memread_uint32(st->data + 44, G_LITTLE_ENDIAN);
667
0
}
668
/**
669
 * fu_struct_elf_program_header64le_get_align: (skip):
670
 **/
671
guint64
672
fu_struct_elf_program_header64le_get_align(const FuStructElfProgramHeader64le *st)
673
0
{
674
0
    g_return_val_if_fail(st != NULL, 0x0);
675
0
    return fu_memread_uint64(st->data + 48, G_LITTLE_ENDIAN);
676
0
}
677
678
/* setters */
679
/**
680
 * fu_struct_elf_program_header64le_set_flags: (skip):
681
 **/
682
void
683
fu_struct_elf_program_header64le_set_flags(FuStructElfProgramHeader64le *st, guint32 value)
684
0
{
685
0
    g_return_if_fail(st != NULL);
686
0
    fu_memwrite_uint32(st->data + 0, value, G_LITTLE_ENDIAN);
687
0
}
688
/**
689
 * fu_struct_elf_program_header64le_set_offset: (skip):
690
 **/
691
void
692
fu_struct_elf_program_header64le_set_offset(FuStructElfProgramHeader64le *st, guint64 value)
693
0
{
694
0
    g_return_if_fail(st != NULL);
695
0
    fu_memwrite_uint64(st->data + 4, value, G_LITTLE_ENDIAN);
696
0
}
697
/**
698
 * fu_struct_elf_program_header64le_set_vaddr: (skip):
699
 **/
700
void
701
fu_struct_elf_program_header64le_set_vaddr(FuStructElfProgramHeader64le *st, guint64 value)
702
131
{
703
131
    g_return_if_fail(st != NULL);
704
131
    fu_memwrite_uint64(st->data + 12, value, G_LITTLE_ENDIAN);
705
131
}
706
/**
707
 * fu_struct_elf_program_header64le_set_paddr: (skip):
708
 **/
709
void
710
fu_struct_elf_program_header64le_set_paddr(FuStructElfProgramHeader64le *st, guint64 value)
711
131
{
712
131
    g_return_if_fail(st != NULL);
713
131
    fu_memwrite_uint64(st->data + 20, value, G_LITTLE_ENDIAN);
714
131
}
715
/**
716
 * fu_struct_elf_program_header64le_set_filesz: (skip):
717
 **/
718
void
719
fu_struct_elf_program_header64le_set_filesz(FuStructElfProgramHeader64le *st, guint64 value)
720
131
{
721
131
    g_return_if_fail(st != NULL);
722
131
    fu_memwrite_uint64(st->data + 28, value, G_LITTLE_ENDIAN);
723
131
}
724
/**
725
 * fu_struct_elf_program_header64le_set_memsz: (skip):
726
 **/
727
void
728
fu_struct_elf_program_header64le_set_memsz(FuStructElfProgramHeader64le *st, guint64 value)
729
131
{
730
131
    g_return_if_fail(st != NULL);
731
131
    fu_memwrite_uint64(st->data + 36, value, G_LITTLE_ENDIAN);
732
131
}
733
/**
734
 * fu_struct_elf_program_header64le_set_flags2: (skip):
735
 **/
736
void
737
fu_struct_elf_program_header64le_set_flags2(FuStructElfProgramHeader64le *st, guint32 value)
738
0
{
739
0
    g_return_if_fail(st != NULL);
740
0
    fu_memwrite_uint32(st->data + 44, value, G_LITTLE_ENDIAN);
741
0
}
742
/**
743
 * fu_struct_elf_program_header64le_set_align: (skip):
744
 **/
745
void
746
fu_struct_elf_program_header64le_set_align(FuStructElfProgramHeader64le *st, guint64 value)
747
0
{
748
0
    g_return_if_fail(st != NULL);
749
0
    fu_memwrite_uint64(st->data + 48, value, G_LITTLE_ENDIAN);
750
0
}
751
/**
752
 * fu_struct_elf_program_header64le_new: (skip):
753
 **/
754
FuStructElfProgramHeader64le *
755
fu_struct_elf_program_header64le_new(void)
756
236
{
757
236
    FuStructElfProgramHeader64le *st = g_byte_array_sized_new(56);
758
236
    fu_byte_array_set_size(st, 56, 0x0);
759
236
    return st;
760
236
}
761
/**
762
 * fu_struct_elf_program_header64le_to_string: (skip):
763
 **/
764
static gchar *
765
fu_struct_elf_program_header64le_to_string(const FuStructElfProgramHeader64le *st)
766
0
{
767
0
    g_autoptr(GString) str = g_string_new("FuStructElfProgramHeader64le:\n");
768
0
    g_return_val_if_fail(st != NULL, NULL);
769
0
    g_string_append_printf(str, "  flags: 0x%x\n",
770
0
                           (guint) fu_struct_elf_program_header64le_get_flags(st));
771
0
    g_string_append_printf(str, "  offset: 0x%x\n",
772
0
                           (guint) fu_struct_elf_program_header64le_get_offset(st));
773
0
    g_string_append_printf(str, "  vaddr: 0x%x\n",
774
0
                           (guint) fu_struct_elf_program_header64le_get_vaddr(st));
775
0
    g_string_append_printf(str, "  paddr: 0x%x\n",
776
0
                           (guint) fu_struct_elf_program_header64le_get_paddr(st));
777
0
    g_string_append_printf(str, "  filesz: 0x%x\n",
778
0
                           (guint) fu_struct_elf_program_header64le_get_filesz(st));
779
0
    g_string_append_printf(str, "  memsz: 0x%x\n",
780
0
                           (guint) fu_struct_elf_program_header64le_get_memsz(st));
781
0
    g_string_append_printf(str, "  flags2: 0x%x\n",
782
0
                           (guint) fu_struct_elf_program_header64le_get_flags2(st));
783
0
    g_string_append_printf(str, "  align: 0x%x\n",
784
0
                           (guint) fu_struct_elf_program_header64le_get_align(st));
785
0
    if (str->len > 0)
786
0
        g_string_set_size(str, str->len - 1);
787
0
    return g_string_free(g_steal_pointer(&str), FALSE);
788
0
}
789
static gboolean
790
fu_struct_elf_program_header64le_validate_internal(FuStructElfProgramHeader64le *st, GError **error)
791
2.44M
{
792
2.44M
    g_return_val_if_fail(st != NULL, FALSE);
793
2.44M
    return TRUE;
794
2.44M
}
795
static gboolean
796
fu_struct_elf_program_header64le_parse_internal(FuStructElfProgramHeader64le *st, GError **error)
797
2.44M
{
798
2.44M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
799
0
        g_autofree gchar *str = fu_struct_elf_program_header64le_to_string(st);
800
0
        g_debug("%s", str);
801
0
    }
802
2.44M
    if (!fu_struct_elf_program_header64le_validate_internal(st, error))
803
0
        return FALSE;
804
2.44M
    return TRUE;
805
2.44M
}
806
/**
807
 * fu_struct_elf_program_header64le_parse_stream: (skip):
808
 **/
809
FuStructElfProgramHeader64le *
810
fu_struct_elf_program_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
811
2.44M
{
812
2.44M
    g_autoptr(GByteArray) st = NULL;
813
2.44M
    st = fu_input_stream_read_byte_array(stream, offset, 56, NULL, error);
814
2.44M
    if (st == NULL) {
815
120
        g_prefix_error(error, "FuStructElfProgramHeader64le failed read of 0x%x: ", (guint) 56);
816
120
        return NULL;
817
120
    }
818
2.44M
    if (st->len != 56) {
819
17
        g_set_error(error,
820
17
                    FWUPD_ERROR,
821
17
                    FWUPD_ERROR_INVALID_DATA,
822
17
                    "FuStructElfProgramHeader64le requested 0x%x and got 0x%x",
823
17
                    (guint) 56,
824
17
                    (guint) st->len);
825
17
        return NULL;
826
17
    }
827
2.44M
    if (!fu_struct_elf_program_header64le_parse_internal(st, error))
828
0
        return NULL;
829
2.44M
    return g_steal_pointer(&st);
830
2.44M
}
831
/* getters */
832
/**
833
 * fu_struct_elf_section_header64le_get_name: (skip):
834
 **/
835
guint32
836
fu_struct_elf_section_header64le_get_name(const FuStructElfSectionHeader64le *st)
837
3.87M
{
838
3.87M
    g_return_val_if_fail(st != NULL, 0x0);
839
3.87M
    return fu_memread_uint32(st->data + 0, G_LITTLE_ENDIAN);
840
3.87M
}
841
/**
842
 * fu_struct_elf_section_header64le_get_type: (skip):
843
 **/
844
FuElfSectionHeaderType
845
fu_struct_elf_section_header64le_get_type(const FuStructElfSectionHeader64le *st)
846
15.8M
{
847
15.8M
    g_return_val_if_fail(st != NULL, 0x0);
848
15.8M
    return fu_memread_uint32(st->data + 4, G_LITTLE_ENDIAN);
849
15.8M
}
850
/**
851
 * fu_struct_elf_section_header64le_get_flags: (skip):
852
 **/
853
guint64
854
fu_struct_elf_section_header64le_get_flags(const FuStructElfSectionHeader64le *st)
855
0
{
856
0
    g_return_val_if_fail(st != NULL, 0x0);
857
0
    return fu_memread_uint64(st->data + 8, G_LITTLE_ENDIAN);
858
0
}
859
/**
860
 * fu_struct_elf_section_header64le_get_addr: (skip):
861
 **/
862
guint64
863
fu_struct_elf_section_header64le_get_addr(const FuStructElfSectionHeader64le *st)
864
0
{
865
0
    g_return_val_if_fail(st != NULL, 0x0);
866
0
    return fu_memread_uint64(st->data + 16, G_LITTLE_ENDIAN);
867
0
}
868
/**
869
 * fu_struct_elf_section_header64le_get_offset: (skip):
870
 **/
871
guint64
872
fu_struct_elf_section_header64le_get_offset(const FuStructElfSectionHeader64le *st)
873
4.07M
{
874
4.07M
    g_return_val_if_fail(st != NULL, 0x0);
875
4.07M
    return fu_memread_uint64(st->data + 24, G_LITTLE_ENDIAN);
876
4.07M
}
877
/**
878
 * fu_struct_elf_section_header64le_get_size: (skip):
879
 **/
880
guint64
881
fu_struct_elf_section_header64le_get_size(const FuStructElfSectionHeader64le *st)
882
4.07M
{
883
4.07M
    g_return_val_if_fail(st != NULL, 0x0);
884
4.07M
    return fu_memread_uint64(st->data + 32, G_LITTLE_ENDIAN);
885
4.07M
}
886
/**
887
 * fu_struct_elf_section_header64le_get_link: (skip):
888
 **/
889
guint32
890
fu_struct_elf_section_header64le_get_link(const FuStructElfSectionHeader64le *st)
891
0
{
892
0
    g_return_val_if_fail(st != NULL, 0x0);
893
0
    return fu_memread_uint32(st->data + 40, G_LITTLE_ENDIAN);
894
0
}
895
/**
896
 * fu_struct_elf_section_header64le_get_info: (skip):
897
 **/
898
guint32
899
fu_struct_elf_section_header64le_get_info(const FuStructElfSectionHeader64le *st)
900
0
{
901
0
    g_return_val_if_fail(st != NULL, 0x0);
902
0
    return fu_memread_uint32(st->data + 44, G_LITTLE_ENDIAN);
903
0
}
904
/**
905
 * fu_struct_elf_section_header64le_get_addralign: (skip):
906
 **/
907
guint64
908
fu_struct_elf_section_header64le_get_addralign(const FuStructElfSectionHeader64le *st)
909
0
{
910
0
    g_return_val_if_fail(st != NULL, 0x0);
911
0
    return fu_memread_uint64(st->data + 48, G_LITTLE_ENDIAN);
912
0
}
913
/**
914
 * fu_struct_elf_section_header64le_get_entsize: (skip):
915
 **/
916
guint64
917
fu_struct_elf_section_header64le_get_entsize(const FuStructElfSectionHeader64le *st)
918
0
{
919
0
    g_return_val_if_fail(st != NULL, 0x0);
920
0
    return fu_memread_uint64(st->data + 56, G_LITTLE_ENDIAN);
921
0
}
922
923
/* setters */
924
/**
925
 * fu_struct_elf_section_header64le_set_name: (skip):
926
 **/
927
void
928
fu_struct_elf_section_header64le_set_name(FuStructElfSectionHeader64le *st, guint32 value)
929
131
{
930
131
    g_return_if_fail(st != NULL);
931
131
    fu_memwrite_uint32(st->data + 0, value, G_LITTLE_ENDIAN);
932
131
}
933
/**
934
 * fu_struct_elf_section_header64le_set_type: (skip):
935
 **/
936
void
937
fu_struct_elf_section_header64le_set_type(FuStructElfSectionHeader64le *st, FuElfSectionHeaderType value)
938
131
{
939
131
    g_return_if_fail(st != NULL);
940
131
    fu_memwrite_uint32(st->data + 4, value, G_LITTLE_ENDIAN);
941
131
}
942
/**
943
 * fu_struct_elf_section_header64le_set_flags: (skip):
944
 **/
945
void
946
fu_struct_elf_section_header64le_set_flags(FuStructElfSectionHeader64le *st, guint64 value)
947
0
{
948
0
    g_return_if_fail(st != NULL);
949
0
    fu_memwrite_uint64(st->data + 8, value, G_LITTLE_ENDIAN);
950
0
}
951
/**
952
 * fu_struct_elf_section_header64le_set_addr: (skip):
953
 **/
954
void
955
fu_struct_elf_section_header64le_set_addr(FuStructElfSectionHeader64le *st, guint64 value)
956
0
{
957
0
    g_return_if_fail(st != NULL);
958
0
    fu_memwrite_uint64(st->data + 16, value, G_LITTLE_ENDIAN);
959
0
}
960
/**
961
 * fu_struct_elf_section_header64le_set_offset: (skip):
962
 **/
963
void
964
fu_struct_elf_section_header64le_set_offset(FuStructElfSectionHeader64le *st, guint64 value)
965
131
{
966
131
    g_return_if_fail(st != NULL);
967
131
    fu_memwrite_uint64(st->data + 24, value, G_LITTLE_ENDIAN);
968
131
}
969
/**
970
 * fu_struct_elf_section_header64le_set_size: (skip):
971
 **/
972
void
973
fu_struct_elf_section_header64le_set_size(FuStructElfSectionHeader64le *st, guint64 value)
974
131
{
975
131
    g_return_if_fail(st != NULL);
976
131
    fu_memwrite_uint64(st->data + 32, value, G_LITTLE_ENDIAN);
977
131
}
978
/**
979
 * fu_struct_elf_section_header64le_set_link: (skip):
980
 **/
981
void
982
fu_struct_elf_section_header64le_set_link(FuStructElfSectionHeader64le *st, guint32 value)
983
0
{
984
0
    g_return_if_fail(st != NULL);
985
0
    fu_memwrite_uint32(st->data + 40, value, G_LITTLE_ENDIAN);
986
0
}
987
/**
988
 * fu_struct_elf_section_header64le_set_info: (skip):
989
 **/
990
void
991
fu_struct_elf_section_header64le_set_info(FuStructElfSectionHeader64le *st, guint32 value)
992
0
{
993
0
    g_return_if_fail(st != NULL);
994
0
    fu_memwrite_uint32(st->data + 44, value, G_LITTLE_ENDIAN);
995
0
}
996
/**
997
 * fu_struct_elf_section_header64le_set_addralign: (skip):
998
 **/
999
void
1000
fu_struct_elf_section_header64le_set_addralign(FuStructElfSectionHeader64le *st, guint64 value)
1001
0
{
1002
0
    g_return_if_fail(st != NULL);
1003
0
    fu_memwrite_uint64(st->data + 48, value, G_LITTLE_ENDIAN);
1004
0
}
1005
/**
1006
 * fu_struct_elf_section_header64le_set_entsize: (skip):
1007
 **/
1008
void
1009
fu_struct_elf_section_header64le_set_entsize(FuStructElfSectionHeader64le *st, guint64 value)
1010
0
{
1011
0
    g_return_if_fail(st != NULL);
1012
0
    fu_memwrite_uint64(st->data + 56, value, G_LITTLE_ENDIAN);
1013
0
}
1014
/**
1015
 * fu_struct_elf_section_header64le_new: (skip):
1016
 **/
1017
FuStructElfSectionHeader64le *
1018
fu_struct_elf_section_header64le_new(void)
1019
131
{
1020
131
    FuStructElfSectionHeader64le *st = g_byte_array_sized_new(64);
1021
131
    fu_byte_array_set_size(st, 64, 0x0);
1022
131
    return st;
1023
131
}
1024
/**
1025
 * fu_struct_elf_section_header64le_to_string: (skip):
1026
 **/
1027
static gchar *
1028
fu_struct_elf_section_header64le_to_string(const FuStructElfSectionHeader64le *st)
1029
0
{
1030
0
    g_autoptr(GString) str = g_string_new("FuStructElfSectionHeader64le:\n");
1031
0
    g_return_val_if_fail(st != NULL, NULL);
1032
0
    g_string_append_printf(str, "  name: 0x%x\n",
1033
0
                           (guint) fu_struct_elf_section_header64le_get_name(st));
1034
0
    {
1035
0
        const gchar *tmp = fu_elf_section_header_type_to_string(fu_struct_elf_section_header64le_get_type(st));
1036
0
        if (tmp != NULL) {
1037
0
            g_string_append_printf(str, "  type: 0x%x [%s]\n", (guint) fu_struct_elf_section_header64le_get_type(st), tmp);
1038
0
        } else {
1039
0
            g_string_append_printf(str, "  type: 0x%x\n", (guint) fu_struct_elf_section_header64le_get_type(st));
1040
0
        }
1041
0
    }
1042
0
    g_string_append_printf(str, "  flags: 0x%x\n",
1043
0
                           (guint) fu_struct_elf_section_header64le_get_flags(st));
1044
0
    g_string_append_printf(str, "  addr: 0x%x\n",
1045
0
                           (guint) fu_struct_elf_section_header64le_get_addr(st));
1046
0
    g_string_append_printf(str, "  offset: 0x%x\n",
1047
0
                           (guint) fu_struct_elf_section_header64le_get_offset(st));
1048
0
    g_string_append_printf(str, "  size: 0x%x\n",
1049
0
                           (guint) fu_struct_elf_section_header64le_get_size(st));
1050
0
    g_string_append_printf(str, "  link: 0x%x\n",
1051
0
                           (guint) fu_struct_elf_section_header64le_get_link(st));
1052
0
    g_string_append_printf(str, "  info: 0x%x\n",
1053
0
                           (guint) fu_struct_elf_section_header64le_get_info(st));
1054
0
    g_string_append_printf(str, "  addralign: 0x%x\n",
1055
0
                           (guint) fu_struct_elf_section_header64le_get_addralign(st));
1056
0
    g_string_append_printf(str, "  entsize: 0x%x\n",
1057
0
                           (guint) fu_struct_elf_section_header64le_get_entsize(st));
1058
0
    if (str->len > 0)
1059
0
        g_string_set_size(str, str->len - 1);
1060
0
    return g_string_free(g_steal_pointer(&str), FALSE);
1061
0
}
1062
static gboolean
1063
fu_struct_elf_section_header64le_validate_internal(FuStructElfSectionHeader64le *st, GError **error)
1064
11.7M
{
1065
11.7M
    g_return_val_if_fail(st != NULL, FALSE);
1066
11.7M
    return TRUE;
1067
11.7M
}
1068
static gboolean
1069
fu_struct_elf_section_header64le_parse_internal(FuStructElfSectionHeader64le *st, GError **error)
1070
11.7M
{
1071
11.7M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
1072
0
        g_autofree gchar *str = fu_struct_elf_section_header64le_to_string(st);
1073
0
        g_debug("%s", str);
1074
0
    }
1075
11.7M
    if (!fu_struct_elf_section_header64le_validate_internal(st, error))
1076
0
        return FALSE;
1077
11.7M
    return TRUE;
1078
11.7M
}
1079
/**
1080
 * fu_struct_elf_section_header64le_parse_stream: (skip):
1081
 **/
1082
FuStructElfSectionHeader64le *
1083
fu_struct_elf_section_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
1084
11.7M
{
1085
11.7M
    g_autoptr(GByteArray) st = NULL;
1086
11.7M
    st = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
1087
11.7M
    if (st == NULL) {
1088
72
        g_prefix_error(error, "FuStructElfSectionHeader64le failed read of 0x%x: ", (guint) 64);
1089
72
        return NULL;
1090
72
    }
1091
11.7M
    if (st->len != 64) {
1092
18
        g_set_error(error,
1093
18
                    FWUPD_ERROR,
1094
18
                    FWUPD_ERROR_INVALID_DATA,
1095
18
                    "FuStructElfSectionHeader64le requested 0x%x and got 0x%x",
1096
18
                    (guint) 64,
1097
18
                    (guint) st->len);
1098
18
        return NULL;
1099
18
    }
1100
11.7M
    if (!fu_struct_elf_section_header64le_parse_internal(st, error))
1101
0
        return NULL;
1102
11.7M
    return g_steal_pointer(&st);
1103
11.7M
}