Coverage Report

Created: 2026-01-09 07:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-fmap-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-fmap-struct.h"
12
#include "fu-byte-array.h"
13
#include "fu-mem-private.h"
14
#include "fu-string.h"
15
16
#ifdef G_LOG_DOMAIN
17
  #undef G_LOG_DOMAIN
18
#endif
19
0
#define G_LOG_DOMAIN "FuStruct"
20
/**
21
 * fu_struct_fmap_ref: (skip):
22
 **/
23
FuStructFmap *
24
fu_struct_fmap_ref(FuStructFmap *st)
25
0
{
26
0
    g_return_val_if_fail(st != NULL, NULL);
27
0
    st->refcount++;
28
0
    return st;
29
0
}
30
/**
31
 * fu_struct_fmap_unref: (skip):
32
 **/
33
void
34
fu_struct_fmap_unref(FuStructFmap *st)
35
24.5k
{
36
24.5k
    g_return_if_fail(st != NULL);
37
24.5k
    if (st->refcount == 0) {
38
0
        g_critical("FuStructFmap refcount already zero");
39
0
        return;
40
0
    }
41
24.5k
    if (--st->refcount > 0)
42
0
        return;
43
24.5k
    if (st->buf != NULL)
44
24.5k
        g_byte_array_unref(st->buf);
45
24.5k
    g_free(st);
46
24.5k
}
47
/**
48
 * fu_struct_fmap_new_internal: (skip):
49
 **/
50
static FuStructFmap *
51
fu_struct_fmap_new_internal(void)
52
24.5k
{
53
24.5k
    FuStructFmap *st = g_new0(FuStructFmap, 1);
54
24.5k
    st->refcount = 1;
55
24.5k
    return st;
56
24.5k
}
57
58
/* getters */
59
/**
60
 * fu_struct_fmap_get_signature: (skip):
61
 **/
62
static gchar *
63
fu_struct_fmap_get_signature(const FuStructFmap *st)
64
0
{
65
0
    g_return_val_if_fail(st != NULL, NULL);
66
0
    return fu_memstrsafe(st->buf->data, st->buf->len, 0, 8, NULL);
67
0
}
68
/**
69
 * fu_struct_fmap_get_ver_major: (skip):
70
 **/
71
guint8
72
fu_struct_fmap_get_ver_major(const FuStructFmap *st)
73
11.7k
{
74
11.7k
    g_return_val_if_fail(st != NULL, 0x0);
75
11.7k
    return st->buf->data[8];
76
11.7k
}
77
/**
78
 * fu_struct_fmap_get_ver_minor: (skip):
79
 **/
80
guint8
81
fu_struct_fmap_get_ver_minor(const FuStructFmap *st)
82
11.7k
{
83
11.7k
    g_return_val_if_fail(st != NULL, 0x0);
84
11.7k
    return st->buf->data[9];
85
11.7k
}
86
/**
87
 * fu_struct_fmap_get_base: (skip):
88
 **/
89
guint64
90
fu_struct_fmap_get_base(const FuStructFmap *st)
91
11.7k
{
92
11.7k
    g_return_val_if_fail(st != NULL, 0x0);
93
11.7k
    return fu_memread_uint64(st->buf->data + 10, G_LITTLE_ENDIAN);
94
11.7k
}
95
/**
96
 * fu_struct_fmap_get_size: (skip):
97
 **/
98
guint32
99
fu_struct_fmap_get_size(const FuStructFmap *st)
100
11.8k
{
101
11.8k
    g_return_val_if_fail(st != NULL, 0x0);
102
11.8k
    return fu_memread_uint32(st->buf->data + 18, G_LITTLE_ENDIAN);
103
11.8k
}
104
/**
105
 * fu_struct_fmap_get_name: (skip):
106
 **/
107
gchar *
108
fu_struct_fmap_get_name(const FuStructFmap *st)
109
0
{
110
0
    g_return_val_if_fail(st != NULL, NULL);
111
0
    return fu_memstrsafe(st->buf->data, st->buf->len, 22, 32, NULL);
112
0
}
113
/**
114
 * fu_struct_fmap_get_nareas: (skip):
115
 **/
116
guint16
117
fu_struct_fmap_get_nareas(const FuStructFmap *st)
118
11.7k
{
119
11.7k
    g_return_val_if_fail(st != NULL, 0x0);
120
11.7k
    return fu_memread_uint16(st->buf->data + 54, G_LITTLE_ENDIAN);
121
11.7k
}
122
123
/* setters */
124
/**
125
 * fu_struct_fmap_set_signature: (skip):
126
 **/
127
static gboolean
128
fu_struct_fmap_set_signature(FuStructFmap *st, const gchar *value, GError **error)
129
922
{
130
922
    gsize len;
131
922
    g_return_val_if_fail(st != NULL, FALSE);
132
922
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
133
922
    if (value == NULL) {
134
0
        memset(st->buf->data + 0, 0x0, 8);
135
0
        return TRUE;
136
0
    }
137
922
    len = strlen(value);
138
922
    if (len > 8) {
139
0
        g_set_error(error,
140
0
                    FWUPD_ERROR,
141
0
                    FWUPD_ERROR_INVALID_DATA,
142
0
                    "string '%s' (0x%x bytes) does not fit in FuStructFmap.signature (0x%x bytes)",
143
0
                    value, (guint) len, (guint) 8);
144
0
        return FALSE;
145
0
    }
146
922
    return fu_memcpy_safe(st->buf->data, st->buf->len, 0, (const guint8 *)value, len, 0x0, len, error);
147
922
}
148
/**
149
 * fu_struct_fmap_set_ver_major: (skip):
150
 **/
151
void
152
fu_struct_fmap_set_ver_major(FuStructFmap *st, guint8 value)
153
1.43k
{
154
1.43k
    g_return_if_fail(st != NULL);
155
1.43k
    st->buf->data[8] = value;
156
1.43k
}
157
/**
158
 * fu_struct_fmap_set_ver_minor: (skip):
159
 **/
160
void
161
fu_struct_fmap_set_ver_minor(FuStructFmap *st, guint8 value)
162
1.43k
{
163
1.43k
    g_return_if_fail(st != NULL);
164
1.43k
    st->buf->data[9] = value;
165
1.43k
}
166
/**
167
 * fu_struct_fmap_set_base: (skip):
168
 **/
169
void
170
fu_struct_fmap_set_base(FuStructFmap *st, guint64 value)
171
510
{
172
510
    g_return_if_fail(st != NULL);
173
510
    fu_memwrite_uint64(st->buf->data + 10, value, G_LITTLE_ENDIAN);
174
510
}
175
/**
176
 * fu_struct_fmap_set_size: (skip):
177
 **/
178
void
179
fu_struct_fmap_set_size(FuStructFmap *st, guint32 value)
180
510
{
181
510
    g_return_if_fail(st != NULL);
182
510
    fu_memwrite_uint32(st->buf->data + 18, value, G_LITTLE_ENDIAN);
183
510
}
184
/**
185
 * fu_struct_fmap_set_name: (skip):
186
 **/
187
gboolean
188
fu_struct_fmap_set_name(FuStructFmap *st, const gchar *value, GError **error)
189
0
{
190
0
    gsize len;
191
0
    g_return_val_if_fail(st != NULL, FALSE);
192
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
193
0
    if (value == NULL) {
194
0
        memset(st->buf->data + 22, 0x0, 32);
195
0
        return TRUE;
196
0
    }
197
0
    len = strlen(value);
198
0
    if (len > 32) {
199
0
        g_set_error(error,
200
0
                    FWUPD_ERROR,
201
0
                    FWUPD_ERROR_INVALID_DATA,
202
0
                    "string '%s' (0x%x bytes) does not fit in FuStructFmap.name (0x%x bytes)",
203
0
                    value, (guint) len, (guint) 32);
204
0
        return FALSE;
205
0
    }
206
0
    return fu_memcpy_safe(st->buf->data, st->buf->len, 22, (const guint8 *)value, len, 0x0, len, error);
207
0
}
208
/**
209
 * fu_struct_fmap_set_nareas: (skip):
210
 **/
211
void
212
fu_struct_fmap_set_nareas(FuStructFmap *st, guint16 value)
213
510
{
214
510
    g_return_if_fail(st != NULL);
215
510
    fu_memwrite_uint16(st->buf->data + 54, value, G_LITTLE_ENDIAN);
216
510
}
217
/**
218
 * fu_struct_fmap_new: (skip):
219
 **/
220
FuStructFmap *
221
fu_struct_fmap_new(void)
222
922
{
223
922
    FuStructFmap *st = fu_struct_fmap_new_internal();
224
922
    st->buf = g_byte_array_sized_new(56);
225
922
    fu_byte_array_set_size(st->buf, 56, 0x0);
226
922
    fu_struct_fmap_set_signature(st, "__FMAP__", NULL);
227
922
    fu_struct_fmap_set_ver_major(st, 0x1);
228
922
    fu_struct_fmap_set_ver_minor(st, 0x1);
229
922
    return st;
230
922
}
231
/**
232
 * fu_struct_fmap_to_string: (skip):
233
 **/
234
static gchar *
235
fu_struct_fmap_to_string(const FuStructFmap *st)
236
0
{
237
0
    g_autoptr(GString) str = g_string_new("FuStructFmap:\n");
238
0
    g_return_val_if_fail(st != NULL, NULL);
239
0
    {
240
0
        g_autofree gchar *tmp = fu_struct_fmap_get_signature(st);
241
0
        if (tmp != NULL)
242
0
            g_string_append_printf(str, "  signature: %s\n", tmp);
243
0
    }
244
0
    g_string_append_printf(str, "  ver_major: 0x%x\n",
245
0
                           (guint) fu_struct_fmap_get_ver_major(st));
246
0
    g_string_append_printf(str, "  ver_minor: 0x%x\n",
247
0
                           (guint) fu_struct_fmap_get_ver_minor(st));
248
0
    g_string_append_printf(str, "  base: 0x%x\n",
249
0
                           (guint) fu_struct_fmap_get_base(st));
250
0
    g_string_append_printf(str, "  size: 0x%x\n",
251
0
                           (guint) fu_struct_fmap_get_size(st));
252
0
    {
253
0
        g_autofree gchar *tmp = fu_struct_fmap_get_name(st);
254
0
        if (tmp != NULL)
255
0
            g_string_append_printf(str, "  name: %s\n", tmp);
256
0
    }
257
0
    g_string_append_printf(str, "  nareas: 0x%x\n",
258
0
                           (guint) fu_struct_fmap_get_nareas(st));
259
0
    if (str->len > 0)
260
0
        g_string_set_size(str, str->len - 1);
261
0
    return g_string_free(g_steal_pointer(&str), FALSE);
262
0
}
263
static gboolean
264
fu_struct_fmap_validate_internal(FuStructFmap *st, GError **error)
265
23.5k
{
266
23.5k
    g_return_val_if_fail(st != NULL, FALSE);
267
23.5k
    if (strncmp((const gchar *) (st->buf->data + 0), "__FMAP__", 8) != 0) {
268
0
        g_autofree gchar *str = fu_struct_fmap_get_signature(st);
269
0
        g_set_error(error,
270
0
                    FWUPD_ERROR,
271
0
                    FWUPD_ERROR_INVALID_DATA,
272
0
                    "constant FuStructFmap.signature was not valid, "
273
0
                    "expected '__FMAP__' and got '%s'",
274
0
                    str);
275
0
        return FALSE;
276
0
    }
277
23.5k
    return TRUE;
278
23.5k
}
279
/**
280
 * fu_struct_fmap_validate_stream: (skip):
281
 **/
282
gboolean
283
fu_struct_fmap_validate_stream(GInputStream *stream, gsize offset, GError **error)
284
11.8k
{
285
11.8k
    g_autoptr(FuStructFmap) st = fu_struct_fmap_new_internal();
286
11.8k
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
287
11.8k
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
288
11.8k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 56, NULL, error);
289
11.8k
    if (st->buf == NULL) {
290
0
        g_prefix_error(error, "FuStructFmap failed read of 0x%x: ", (guint) 56);
291
0
        return FALSE;
292
0
    }
293
11.8k
    if (st->buf->len != 56) {
294
37
        g_set_error(error,
295
37
                    FWUPD_ERROR,
296
37
                    FWUPD_ERROR_INVALID_DATA,
297
37
                    "FuStructFmap requested 0x%x and got 0x%x",
298
37
                    (guint) 56,
299
37
                    (guint) st->buf->len);
300
37
        return FALSE;
301
37
    }
302
11.7k
    return fu_struct_fmap_validate_internal(st, error);
303
11.8k
}
304
static gboolean
305
fu_struct_fmap_parse_internal(FuStructFmap *st, GError **error)
306
11.7k
{
307
11.7k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
308
0
        g_autofree gchar *str = fu_struct_fmap_to_string(st);
309
0
        g_debug("%s", str);
310
0
    }
311
11.7k
    if (!fu_struct_fmap_validate_internal(st, error))
312
0
        return FALSE;
313
11.7k
    return TRUE;
314
11.7k
}
315
/**
316
 * fu_struct_fmap_parse_stream: (skip):
317
 **/
318
FuStructFmap *
319
fu_struct_fmap_parse_stream(GInputStream *stream, gsize offset, GError **error)
320
11.7k
{
321
11.7k
    g_autoptr(FuStructFmap) st = fu_struct_fmap_new_internal();
322
11.7k
    st->buf = fu_input_stream_read_byte_array(stream, offset, 56, NULL, error);
323
11.7k
    if (st->buf == NULL) {
324
0
        g_prefix_error(error, "FuStructFmap failed read of 0x%x: ", (guint) 56);
325
0
        return NULL;
326
0
    }
327
11.7k
    if (st->buf->len != 56) {
328
0
        g_set_error(error,
329
0
                    FWUPD_ERROR,
330
0
                    FWUPD_ERROR_INVALID_DATA,
331
0
                    "FuStructFmap requested 0x%x and got 0x%x",
332
0
                    (guint) 56,
333
0
                    (guint) st->buf->len);
334
0
        return NULL;
335
0
    }
336
11.7k
    if (!fu_struct_fmap_parse_internal(st, error))
337
0
        return NULL;
338
11.7k
    return g_steal_pointer(&st);
339
11.7k
}
340
/**
341
 * fu_struct_fmap_area_ref: (skip):
342
 **/
343
FuStructFmapArea *
344
fu_struct_fmap_area_ref(FuStructFmapArea *st)
345
0
{
346
0
    g_return_val_if_fail(st != NULL, NULL);
347
0
    st->refcount++;
348
0
    return st;
349
0
}
350
/**
351
 * fu_struct_fmap_area_unref: (skip):
352
 **/
353
void
354
fu_struct_fmap_area_unref(FuStructFmapArea *st)
355
23.0M
{
356
23.0M
    g_return_if_fail(st != NULL);
357
23.0M
    if (st->refcount == 0) {
358
0
        g_critical("FuStructFmapArea refcount already zero");
359
0
        return;
360
0
    }
361
23.0M
    if (--st->refcount > 0)
362
0
        return;
363
23.0M
    if (st->buf != NULL)
364
23.0M
        g_byte_array_unref(st->buf);
365
23.0M
    g_free(st);
366
23.0M
}
367
/**
368
 * fu_struct_fmap_area_new_internal: (skip):
369
 **/
370
static FuStructFmapArea *
371
fu_struct_fmap_area_new_internal(void)
372
23.0M
{
373
23.0M
    FuStructFmapArea *st = g_new0(FuStructFmapArea, 1);
374
23.0M
    st->refcount = 1;
375
23.0M
    return st;
376
23.0M
}
377
378
/* getters */
379
/**
380
 * fu_struct_fmap_area_get_offset: (skip):
381
 **/
382
guint32
383
fu_struct_fmap_area_get_offset(const FuStructFmapArea *st)
384
150k
{
385
150k
    g_return_val_if_fail(st != NULL, 0x0);
386
150k
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
387
150k
}
388
/**
389
 * fu_struct_fmap_area_get_size: (skip):
390
 **/
391
guint32
392
fu_struct_fmap_area_get_size(const FuStructFmapArea *st)
393
23.0M
{
394
23.0M
    g_return_val_if_fail(st != NULL, 0x0);
395
23.0M
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
396
23.0M
}
397
/**
398
 * fu_struct_fmap_area_get_name: (skip):
399
 **/
400
gchar *
401
fu_struct_fmap_area_get_name(const FuStructFmapArea *st)
402
148k
{
403
148k
    g_return_val_if_fail(st != NULL, NULL);
404
148k
    return fu_memstrsafe(st->buf->data, st->buf->len, 8, 32, NULL);
405
148k
}
406
/**
407
 * fu_struct_fmap_area_get_flags: (skip):
408
 **/
409
guint16
410
fu_struct_fmap_area_get_flags(const FuStructFmapArea *st)
411
0
{
412
0
    g_return_val_if_fail(st != NULL, 0x0);
413
0
    return fu_memread_uint16(st->buf->data + 40, G_LITTLE_ENDIAN);
414
0
}
415
416
/* setters */
417
/**
418
 * fu_struct_fmap_area_set_offset: (skip):
419
 **/
420
void
421
fu_struct_fmap_area_set_offset(FuStructFmapArea *st, guint32 value)
422
6.23k
{
423
6.23k
    g_return_if_fail(st != NULL);
424
6.23k
    fu_memwrite_uint32(st->buf->data + 0, value, G_LITTLE_ENDIAN);
425
6.23k
}
426
/**
427
 * fu_struct_fmap_area_set_size: (skip):
428
 **/
429
void
430
fu_struct_fmap_area_set_size(FuStructFmapArea *st, guint32 value)
431
6.23k
{
432
6.23k
    g_return_if_fail(st != NULL);
433
6.23k
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
434
6.23k
}
435
/**
436
 * fu_struct_fmap_area_set_name: (skip):
437
 **/
438
gboolean
439
fu_struct_fmap_area_set_name(FuStructFmapArea *st, const gchar *value, GError **error)
440
6.23k
{
441
6.23k
    gsize len;
442
6.23k
    g_return_val_if_fail(st != NULL, FALSE);
443
6.23k
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
444
6.23k
    if (value == NULL) {
445
0
        memset(st->buf->data + 8, 0x0, 32);
446
0
        return TRUE;
447
0
    }
448
6.23k
    len = strlen(value);
449
6.23k
    if (len > 32) {
450
0
        g_set_error(error,
451
0
                    FWUPD_ERROR,
452
0
                    FWUPD_ERROR_INVALID_DATA,
453
0
                    "string '%s' (0x%x bytes) does not fit in FuStructFmapArea.name (0x%x bytes)",
454
0
                    value, (guint) len, (guint) 32);
455
0
        return FALSE;
456
0
    }
457
6.23k
    return fu_memcpy_safe(st->buf->data, st->buf->len, 8, (const guint8 *)value, len, 0x0, len, error);
458
6.23k
}
459
/**
460
 * fu_struct_fmap_area_set_flags: (skip):
461
 **/
462
void
463
fu_struct_fmap_area_set_flags(FuStructFmapArea *st, guint16 value)
464
0
{
465
0
    g_return_if_fail(st != NULL);
466
0
    fu_memwrite_uint16(st->buf->data + 40, value, G_LITTLE_ENDIAN);
467
0
}
468
/**
469
 * fu_struct_fmap_area_new: (skip):
470
 **/
471
FuStructFmapArea *
472
fu_struct_fmap_area_new(void)
473
6.23k
{
474
6.23k
    FuStructFmapArea *st = fu_struct_fmap_area_new_internal();
475
6.23k
    st->buf = g_byte_array_sized_new(42);
476
6.23k
    fu_byte_array_set_size(st->buf, 42, 0x0);
477
6.23k
    return st;
478
6.23k
}
479
/**
480
 * fu_struct_fmap_area_to_string: (skip):
481
 **/
482
static gchar *
483
fu_struct_fmap_area_to_string(const FuStructFmapArea *st)
484
0
{
485
0
    g_autoptr(GString) str = g_string_new("FuStructFmapArea:\n");
486
0
    g_return_val_if_fail(st != NULL, NULL);
487
0
    g_string_append_printf(str, "  offset: 0x%x\n",
488
0
                           (guint) fu_struct_fmap_area_get_offset(st));
489
0
    g_string_append_printf(str, "  size: 0x%x\n",
490
0
                           (guint) fu_struct_fmap_area_get_size(st));
491
0
    {
492
0
        g_autofree gchar *tmp = fu_struct_fmap_area_get_name(st);
493
0
        if (tmp != NULL)
494
0
            g_string_append_printf(str, "  name: %s\n", tmp);
495
0
    }
496
0
    g_string_append_printf(str, "  flags: 0x%x\n",
497
0
                           (guint) fu_struct_fmap_area_get_flags(st));
498
0
    if (str->len > 0)
499
0
        g_string_set_size(str, str->len - 1);
500
0
    return g_string_free(g_steal_pointer(&str), FALSE);
501
0
}
502
static gboolean
503
fu_struct_fmap_area_validate_internal(FuStructFmapArea *st, GError **error)
504
23.0M
{
505
23.0M
    g_return_val_if_fail(st != NULL, FALSE);
506
23.0M
    return TRUE;
507
23.0M
}
508
static gboolean
509
fu_struct_fmap_area_parse_internal(FuStructFmapArea *st, GError **error)
510
23.0M
{
511
23.0M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
512
0
        g_autofree gchar *str = fu_struct_fmap_area_to_string(st);
513
0
        g_debug("%s", str);
514
0
    }
515
23.0M
    if (!fu_struct_fmap_area_validate_internal(st, error))
516
0
        return FALSE;
517
23.0M
    return TRUE;
518
23.0M
}
519
/**
520
 * fu_struct_fmap_area_parse_stream: (skip):
521
 **/
522
FuStructFmapArea *
523
fu_struct_fmap_area_parse_stream(GInputStream *stream, gsize offset, GError **error)
524
23.0M
{
525
23.0M
    g_autoptr(FuStructFmapArea) st = fu_struct_fmap_area_new_internal();
526
23.0M
    st->buf = fu_input_stream_read_byte_array(stream, offset, 42, NULL, error);
527
23.0M
    if (st->buf == NULL) {
528
2.59k
        g_prefix_error(error, "FuStructFmapArea failed read of 0x%x: ", (guint) 42);
529
2.59k
        return NULL;
530
2.59k
    }
531
23.0M
    if (st->buf->len != 42) {
532
5.93k
        g_set_error(error,
533
5.93k
                    FWUPD_ERROR,
534
5.93k
                    FWUPD_ERROR_INVALID_DATA,
535
5.93k
                    "FuStructFmapArea requested 0x%x and got 0x%x",
536
5.93k
                    (guint) 42,
537
5.93k
                    (guint) st->buf->len);
538
5.93k
        return NULL;
539
5.93k
    }
540
23.0M
    if (!fu_struct_fmap_area_parse_internal(st, error))
541
0
        return NULL;
542
23.0M
    return g_steal_pointer(&st);
543
23.0M
}