Coverage Report

Created: 2025-11-11 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-heci-struct.c
Line
Count
Source
1
/* auto-generated, do not modify */
2
#include "config.h"
3
4
#include <glib.h>
5
6
#include "fu-heci-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
static const gchar *
17
fu_mkhi_group_id_to_string(FuMkhiGroupId val)
18
0
{
19
0
    if (val == FU_MKHI_GROUP_ID_CBM)
20
0
        return "cbm";
21
0
    if (val == FU_MKHI_GROUP_ID_PM)
22
0
        return "pm";
23
0
    if (val == FU_MKHI_GROUP_ID_PWD)
24
0
        return "pwd";
25
0
    if (val == FU_MKHI_GROUP_ID_FWCAPS)
26
0
        return "fwcaps";
27
0
    if (val == FU_MKHI_GROUP_ID_APP)
28
0
        return "app";
29
0
    if (val == FU_MKHI_GROUP_ID_FWUPDATE)
30
0
        return "fwupdate";
31
0
    if (val == FU_MKHI_GROUP_ID_FIRMWARE_UPDATE)
32
0
        return "firmware-update";
33
0
    if (val == FU_MKHI_GROUP_ID_BIST)
34
0
        return "bist";
35
0
    if (val == FU_MKHI_GROUP_ID_MDES)
36
0
        return "mdes";
37
0
    if (val == FU_MKHI_GROUP_ID_ME_DBG)
38
0
        return "me-dbg";
39
0
    if (val == FU_MKHI_GROUP_ID_MCA)
40
0
        return "mca";
41
0
    if (val == FU_MKHI_GROUP_ID_GEN)
42
0
        return "gen";
43
0
    return NULL;
44
0
}
45
46
const gchar *
47
fu_mkhi_status_to_string(FuMkhiStatus val)
48
0
{
49
0
    if (val == FU_MKHI_STATUS_SUCCESS)
50
0
        return "success";
51
0
    if (val == FU_MKHI_STATUS_INVALID_STATE)
52
0
        return "invalid-state";
53
0
    if (val == FU_MKHI_STATUS_MESSAGE_SKIPPED)
54
0
        return "message-skipped";
55
0
    if (val == FU_MKHI_STATUS_SIZE_ERROR)
56
0
        return "size-error";
57
0
    if (val == FU_MKHI_STATUS_UNKNOWN_PERHAPS_NOT_SUPPORTED)
58
0
        return "unknown-perhaps-not-supported";
59
0
    if (val == FU_MKHI_STATUS_NOT_SET)
60
0
        return "not-set";
61
0
    if (val == FU_MKHI_STATUS_NOT_AVAILABLE)
62
0
        return "not-available";
63
0
    if (val == FU_MKHI_STATUS_INVALID_ACCESS)
64
0
        return "invalid-access";
65
0
    if (val == FU_MKHI_STATUS_INVALID_PARAMS)
66
0
        return "invalid-params";
67
0
    if (val == FU_MKHI_STATUS_NOT_READY)
68
0
        return "not-ready";
69
0
    if (val == FU_MKHI_STATUS_NOT_SUPPORTED)
70
0
        return "not-supported";
71
0
    if (val == FU_MKHI_STATUS_INVALID_ADDRESS)
72
0
        return "invalid-address";
73
0
    if (val == FU_MKHI_STATUS_INVALID_COMMAND)
74
0
        return "invalid-command";
75
0
    if (val == FU_MKHI_STATUS_FAILURE)
76
0
        return "failure";
77
0
    if (val == FU_MKHI_STATUS_INVALID_RESOURCE)
78
0
        return "invalid-resource";
79
0
    if (val == FU_MKHI_STATUS_RESOURCE_IN_USE)
80
0
        return "resource-in-use";
81
0
    if (val == FU_MKHI_STATUS_NO_RESOURCE)
82
0
        return "no-resource";
83
0
    if (val == FU_MKHI_STATUS_GENERAL_ERROR)
84
0
        return "general-error";
85
0
    if (val == FU_MKHI_STATUS_LOWER_ARB_SVN)
86
0
        return "lower-arb-svn";
87
0
    if (val == FU_MKHI_STATUS_LOWER_TCB_SVN)
88
0
        return "lower-tcb-svn";
89
0
    if (val == FU_MKHI_STATUS_LOWER_VCN)
90
0
        return "lower-vcn";
91
0
    if (val == FU_MKHI_STATUS_UPDATE_IUP_SVN)
92
0
        return "update-iup-svn";
93
0
    if (val == FU_MKHI_STATUS_UPDATE_IUP_VCN)
94
0
        return "update-iup-vcn";
95
0
    if (val == FU_MKHI_STATUS_UPDATE_IMAGE_LEN)
96
0
        return "update-image-len";
97
0
    if (val == FU_MKHI_STATUS_UPDATE_PV_BIT)
98
0
        return "update-pv-bit";
99
0
    if (val == FU_MKHI_STATUS_UPDATE_ENGINEERING_MISMATCH)
100
0
        return "update-engineering-mismatch";
101
0
    if (val == FU_MKHI_STATUS_UPDATE_VER_MAN_FAILED_OROM)
102
0
        return "update-ver-man-failed-orom";
103
0
    if (val == FU_MKHI_STATUS_UPDATE_DEVICE_ID_NOT_MATCH)
104
0
        return "update-device-id-not-match";
105
0
    if (val == FU_MKHI_STATUS_UPDATE_OPROM_SECTION_NOT_EXIST)
106
0
        return "update-oprom-section-not-exist";
107
0
    if (val == FU_MKHI_STATUS_UPDATE_OPROM_INVALID_STRUCTURE)
108
0
        return "update-oprom-invalid-structure";
109
0
    if (val == FU_MKHI_STATUS_UPDATE_GET_OPROM_VERSION_FAILED0X103_C)
110
0
        return "update-get-oprom-version-failed0x103-c";
111
0
    if (val == FU_MKHI_STATUS_UPDATE_OROM_INVALID_STRUCTURE)
112
0
        return "update-orom-invalid-structure";
113
0
    if (val == FU_MKHI_STATUS_UPDATE_VER_MAN_FAILED_GFX_DATA)
114
0
        return "update-ver-man-failed-gfx-data";
115
0
    if (val == FU_MKHI_STATUS_UPDATE_GFX_DATA_OEM_MANUF_VER)
116
0
        return "update-gfx-data-oem-manuf-ver";
117
0
    return NULL;
118
0
}
119
120
static const gchar *
121
fu_mkhi_command_to_string(FuMkhiCommand val)
122
0
{
123
0
    if (val == FU_MKHI_COMMAND_READ_FILE)
124
0
        return "read-file";
125
0
    if (val == FU_MKHI_COMMAND_READ_FILE_EX)
126
0
        return "read-file-ex";
127
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_COMMIT)
128
0
        return "arbh-svn-commit";
129
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_GET_INFO)
130
0
        return "arbh-svn-get-info";
131
0
    if (val == FU_MKHI_COMMAND_READ_FILE_RESPONSE)
132
0
        return "read-file-response";
133
0
    if (val == FU_MKHI_COMMAND_READ_FILE_EX_RESPONSE)
134
0
        return "read-file-ex-response";
135
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_COMMIT_RESPONSE)
136
0
        return "arbh-svn-commit-response";
137
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_GET_INFO_RESPONSE)
138
0
        return "arbh-svn-get-info-response";
139
0
    return NULL;
140
0
}
141
142
static const gchar *
143
fu_mkhi_arbh_svn_info_entry_usage_id_to_string(FuMkhiArbhSvnInfoEntryUsageId val)
144
0
{
145
0
    if (val == FU_MKHI_ARBH_SVN_INFO_ENTRY_USAGE_ID_CSE_RBE)
146
0
        return "cse-rbe";
147
0
    return NULL;
148
0
}
149
/**
150
 * fu_mkhi_read_file_request_ref: (skip):
151
 **/
152
FuMkhiReadFileRequest *
153
fu_mkhi_read_file_request_ref(FuMkhiReadFileRequest *st)
154
0
{
155
0
    g_return_val_if_fail(st != NULL, NULL);
156
0
    st->refcount++;
157
0
    return st;
158
0
}
159
/**
160
 * fu_mkhi_read_file_request_unref: (skip):
161
 **/
162
void
163
fu_mkhi_read_file_request_unref(FuMkhiReadFileRequest *st)
164
0
{
165
0
    g_return_if_fail(st != NULL);
166
0
    if (st->refcount == 0) {
167
0
        g_critical("FuMkhiReadFileRequest refcount already zero");
168
0
        return;
169
0
    }
170
0
    if (--st->refcount > 0)
171
0
        return;
172
0
    if (st->buf != NULL)
173
0
        g_byte_array_unref(st->buf);
174
0
    g_free(st);
175
0
}
176
static FuMkhiReadFileRequest *
177
fu_mkhi_read_file_request_new_internal(void)
178
0
{
179
0
    FuMkhiReadFileRequest *st = g_new0(FuMkhiReadFileRequest, 1);
180
0
    st->refcount = 1;
181
0
    return st;
182
0
}
183
184
/* getters */
185
186
/* setters */
187
/**
188
 * fu_mkhi_read_file_request_set_group_id: (skip):
189
 **/
190
static void
191
fu_mkhi_read_file_request_set_group_id(FuMkhiReadFileRequest *st, FuMkhiGroupId value)
192
0
{
193
0
    g_return_if_fail(st != NULL);
194
0
    st->buf->data[0] = value;
195
0
}
196
/**
197
 * fu_mkhi_read_file_request_set_command: (skip):
198
 **/
199
static void
200
fu_mkhi_read_file_request_set_command(FuMkhiReadFileRequest *st, FuMkhiCommand value)
201
0
{
202
0
    g_return_if_fail(st != NULL);
203
0
    st->buf->data[1] = value;
204
0
}
205
/**
206
 * fu_mkhi_read_file_request_set_result: (skip):
207
 **/
208
static void
209
fu_mkhi_read_file_request_set_result(FuMkhiReadFileRequest *st, guint8 value)
210
0
{
211
0
    g_return_if_fail(st != NULL);
212
0
    st->buf->data[3] = value;
213
0
}
214
/**
215
 * fu_mkhi_read_file_request_set_filename: (skip):
216
 **/
217
gboolean
218
fu_mkhi_read_file_request_set_filename(FuMkhiReadFileRequest *st, const gchar *value, GError **error)
219
0
{
220
0
    gsize len;
221
0
    g_return_val_if_fail(st != NULL, FALSE);
222
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
223
0
    if (value == NULL) {
224
0
        memset(st->buf->data + 4, 0x0, 64);
225
0
        return TRUE;
226
0
    }
227
0
    len = strlen(value);
228
0
    if (len > 64) {
229
0
        g_set_error(error,
230
0
                    FWUPD_ERROR,
231
0
                    FWUPD_ERROR_INVALID_DATA,
232
0
                    "string '%s' (0x%x bytes) does not fit in FuMkhiReadFileRequest.filename (0x%x bytes)",
233
0
                    value, (guint) len, (guint) 64);
234
0
        return FALSE;
235
0
    }
236
0
    return fu_memcpy_safe(st->buf->data, st->buf->len, 4, (const guint8 *)value, len, 0x0, len, error);
237
0
}
238
/**
239
 * fu_mkhi_read_file_request_set_offset: (skip):
240
 **/
241
static void
242
fu_mkhi_read_file_request_set_offset(FuMkhiReadFileRequest *st, guint32 value)
243
0
{
244
0
    g_return_if_fail(st != NULL);
245
0
    fu_memwrite_uint32(st->buf->data + 68, value, G_LITTLE_ENDIAN);
246
0
}
247
/**
248
 * fu_mkhi_read_file_request_set_data_size: (skip):
249
 **/
250
void
251
fu_mkhi_read_file_request_set_data_size(FuMkhiReadFileRequest *st, guint32 value)
252
0
{
253
0
    g_return_if_fail(st != NULL);
254
0
    fu_memwrite_uint32(st->buf->data + 72, value, G_LITTLE_ENDIAN);
255
0
}
256
/**
257
 * fu_mkhi_read_file_request_set_flags: (skip):
258
 **/
259
void
260
fu_mkhi_read_file_request_set_flags(FuMkhiReadFileRequest *st, guint8 value)
261
0
{
262
0
    g_return_if_fail(st != NULL);
263
0
    st->buf->data[76] = value;
264
0
}
265
/**
266
 * fu_mkhi_read_file_request_new: (skip):
267
 **/
268
FuMkhiReadFileRequest *
269
fu_mkhi_read_file_request_new(void)
270
0
{
271
0
    FuMkhiReadFileRequest *st = fu_mkhi_read_file_request_new_internal();
272
0
    st->buf = g_byte_array_sized_new(77);
273
0
    fu_byte_array_set_size(st->buf, 77, 0x0);
274
0
    fu_mkhi_read_file_request_set_group_id(st, FU_MKHI_GROUP_ID_MCA);
275
0
    fu_mkhi_read_file_request_set_command(st, FU_MKHI_COMMAND_READ_FILE);
276
0
    fu_mkhi_read_file_request_set_result(st, 0x0);
277
0
    fu_mkhi_read_file_request_set_offset(st, 0x0);
278
0
    return st;
279
0
}
280
/**
281
 * fu_mkhi_read_file_response_ref: (skip):
282
 **/
283
FuMkhiReadFileResponse *
284
fu_mkhi_read_file_response_ref(FuMkhiReadFileResponse *st)
285
0
{
286
0
    g_return_val_if_fail(st != NULL, NULL);
287
0
    st->refcount++;
288
0
    return st;
289
0
}
290
/**
291
 * fu_mkhi_read_file_response_unref: (skip):
292
 **/
293
void
294
fu_mkhi_read_file_response_unref(FuMkhiReadFileResponse *st)
295
0
{
296
0
    g_return_if_fail(st != NULL);
297
0
    if (st->refcount == 0) {
298
0
        g_critical("FuMkhiReadFileResponse refcount already zero");
299
0
        return;
300
0
    }
301
0
    if (--st->refcount > 0)
302
0
        return;
303
0
    if (st->buf != NULL)
304
0
        g_byte_array_unref(st->buf);
305
0
    g_free(st);
306
0
}
307
static FuMkhiReadFileResponse *
308
fu_mkhi_read_file_response_new_internal(void)
309
0
{
310
0
    FuMkhiReadFileResponse *st = g_new0(FuMkhiReadFileResponse, 1);
311
0
    st->refcount = 1;
312
0
    return st;
313
0
}
314
315
/* getters */
316
/**
317
 * fu_mkhi_read_file_response_get_group_id: (skip):
318
 **/
319
static FuMkhiGroupId
320
fu_mkhi_read_file_response_get_group_id(const FuMkhiReadFileResponse *st)
321
0
{
322
0
    g_return_val_if_fail(st != NULL, 0x0);
323
0
    return st->buf->data[0];
324
0
}
325
/**
326
 * fu_mkhi_read_file_response_get_command: (skip):
327
 **/
328
static FuMkhiCommand
329
fu_mkhi_read_file_response_get_command(const FuMkhiReadFileResponse *st)
330
0
{
331
0
    g_return_val_if_fail(st != NULL, 0x0);
332
0
    return st->buf->data[1];
333
0
}
334
/**
335
 * fu_mkhi_read_file_response_get_result: (skip):
336
 **/
337
guint8
338
fu_mkhi_read_file_response_get_result(const FuMkhiReadFileResponse *st)
339
0
{
340
0
    g_return_val_if_fail(st != NULL, 0x0);
341
0
    return st->buf->data[3];
342
0
}
343
/**
344
 * fu_mkhi_read_file_response_get_data_size: (skip):
345
 **/
346
guint32
347
fu_mkhi_read_file_response_get_data_size(const FuMkhiReadFileResponse *st)
348
0
{
349
0
    g_return_val_if_fail(st != NULL, 0x0);
350
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
351
0
}
352
353
/* setters */
354
/**
355
 * fu_mkhi_read_file_response_to_string: (skip):
356
 **/
357
static gchar *
358
fu_mkhi_read_file_response_to_string(const FuMkhiReadFileResponse *st)
359
0
{
360
0
    g_autoptr(GString) str = g_string_new("FuMkhiReadFileResponse:\n");
361
0
    g_return_val_if_fail(st != NULL, NULL);
362
0
    g_string_append_printf(str, "  result: 0x%x\n",
363
0
                           (guint) fu_mkhi_read_file_response_get_result(st));
364
0
    g_string_append_printf(str, "  data_size: 0x%x\n",
365
0
                           (guint) fu_mkhi_read_file_response_get_data_size(st));
366
0
    if (str->len > 0)
367
0
        g_string_set_size(str, str->len - 1);
368
0
    return g_string_free(g_steal_pointer(&str), FALSE);
369
0
}
370
static gboolean
371
fu_mkhi_read_file_response_validate_internal(FuMkhiReadFileResponse *st, GError **error)
372
0
{
373
0
    g_return_val_if_fail(st != NULL, FALSE);
374
0
    if (fu_mkhi_read_file_response_get_group_id(st) != FU_MKHI_GROUP_ID_MCA) {
375
0
        g_set_error(error,
376
0
                    FWUPD_ERROR,
377
0
                    FWUPD_ERROR_INVALID_DATA,
378
0
                    "constant FuMkhiReadFileResponse.group_id was not valid, "
379
0
                    "expected 'FuMkhiGroupId' and got '%s'",
380
0
                    fu_mkhi_group_id_to_string(fu_mkhi_read_file_response_get_group_id(st)));
381
0
        return FALSE;
382
0
    }
383
0
    if (fu_mkhi_read_file_response_get_command(st) != FU_MKHI_COMMAND_READ_FILE_RESPONSE) {
384
0
        g_set_error(error,
385
0
                    FWUPD_ERROR,
386
0
                    FWUPD_ERROR_INVALID_DATA,
387
0
                    "constant FuMkhiReadFileResponse.command was not valid, "
388
0
                    "expected 'FuMkhiCommand' and got '%s'",
389
0
                    fu_mkhi_command_to_string(fu_mkhi_read_file_response_get_command(st)));
390
0
        return FALSE;
391
0
    }
392
0
    return TRUE;
393
0
}
394
static gboolean
395
fu_mkhi_read_file_response_parse_internal(FuMkhiReadFileResponse *st, GError **error)
396
0
{
397
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
398
0
        g_autofree gchar *str = fu_mkhi_read_file_response_to_string(st);
399
0
        g_debug("%s", str);
400
0
    }
401
0
    if (!fu_mkhi_read_file_response_validate_internal(st, error))
402
0
        return FALSE;
403
0
    return TRUE;
404
0
}
405
406
/**
407
 * fu_mkhi_read_file_response_parse: (skip):
408
 **/
409
FuMkhiReadFileResponse *
410
fu_mkhi_read_file_response_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
411
0
{
412
0
    g_autoptr(FuMkhiReadFileResponse) st = fu_mkhi_read_file_response_new_internal();
413
0
    g_return_val_if_fail(buf != NULL, NULL);
414
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
415
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
416
0
        g_prefix_error_literal(error, "invalid struct FuMkhiReadFileResponse: ");
417
0
        return NULL;
418
0
    }
419
0
    st->buf = g_byte_array_new();
420
0
    g_byte_array_append(st->buf, buf + offset, 8);
421
0
    if (!fu_mkhi_read_file_response_parse_internal(st, error))
422
0
        return NULL;
423
0
    return g_steal_pointer(&st);
424
0
}
425
/**
426
 * fu_mkhi_read_file_ex_request_ref: (skip):
427
 **/
428
FuMkhiReadFileExRequest *
429
fu_mkhi_read_file_ex_request_ref(FuMkhiReadFileExRequest *st)
430
0
{
431
0
    g_return_val_if_fail(st != NULL, NULL);
432
0
    st->refcount++;
433
0
    return st;
434
0
}
435
/**
436
 * fu_mkhi_read_file_ex_request_unref: (skip):
437
 **/
438
void
439
fu_mkhi_read_file_ex_request_unref(FuMkhiReadFileExRequest *st)
440
0
{
441
0
    g_return_if_fail(st != NULL);
442
0
    if (st->refcount == 0) {
443
0
        g_critical("FuMkhiReadFileExRequest refcount already zero");
444
0
        return;
445
0
    }
446
0
    if (--st->refcount > 0)
447
0
        return;
448
0
    if (st->buf != NULL)
449
0
        g_byte_array_unref(st->buf);
450
0
    g_free(st);
451
0
}
452
static FuMkhiReadFileExRequest *
453
fu_mkhi_read_file_ex_request_new_internal(void)
454
0
{
455
0
    FuMkhiReadFileExRequest *st = g_new0(FuMkhiReadFileExRequest, 1);
456
0
    st->refcount = 1;
457
0
    return st;
458
0
}
459
460
/* getters */
461
462
/* setters */
463
/**
464
 * fu_mkhi_read_file_ex_request_set_group_id: (skip):
465
 **/
466
static void
467
fu_mkhi_read_file_ex_request_set_group_id(FuMkhiReadFileExRequest *st, FuMkhiGroupId value)
468
0
{
469
0
    g_return_if_fail(st != NULL);
470
0
    st->buf->data[0] = value;
471
0
}
472
/**
473
 * fu_mkhi_read_file_ex_request_set_command: (skip):
474
 **/
475
static void
476
fu_mkhi_read_file_ex_request_set_command(FuMkhiReadFileExRequest *st, FuMkhiCommand value)
477
0
{
478
0
    g_return_if_fail(st != NULL);
479
0
    st->buf->data[1] = value;
480
0
}
481
/**
482
 * fu_mkhi_read_file_ex_request_set_result: (skip):
483
 **/
484
static void
485
fu_mkhi_read_file_ex_request_set_result(FuMkhiReadFileExRequest *st, guint8 value)
486
0
{
487
0
    g_return_if_fail(st != NULL);
488
0
    st->buf->data[3] = value;
489
0
}
490
/**
491
 * fu_mkhi_read_file_ex_request_set_file_id: (skip):
492
 **/
493
void
494
fu_mkhi_read_file_ex_request_set_file_id(FuMkhiReadFileExRequest *st, guint32 value)
495
0
{
496
0
    g_return_if_fail(st != NULL);
497
0
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
498
0
}
499
/**
500
 * fu_mkhi_read_file_ex_request_set_offset: (skip):
501
 **/
502
static void
503
fu_mkhi_read_file_ex_request_set_offset(FuMkhiReadFileExRequest *st, guint32 value)
504
0
{
505
0
    g_return_if_fail(st != NULL);
506
0
    fu_memwrite_uint32(st->buf->data + 8, value, G_LITTLE_ENDIAN);
507
0
}
508
/**
509
 * fu_mkhi_read_file_ex_request_set_data_size: (skip):
510
 **/
511
void
512
fu_mkhi_read_file_ex_request_set_data_size(FuMkhiReadFileExRequest *st, guint32 value)
513
0
{
514
0
    g_return_if_fail(st != NULL);
515
0
    fu_memwrite_uint32(st->buf->data + 12, value, G_LITTLE_ENDIAN);
516
0
}
517
/**
518
 * fu_mkhi_read_file_ex_request_set_flags: (skip):
519
 **/
520
void
521
fu_mkhi_read_file_ex_request_set_flags(FuMkhiReadFileExRequest *st, guint8 value)
522
0
{
523
0
    g_return_if_fail(st != NULL);
524
0
    st->buf->data[16] = value;
525
0
}
526
/**
527
 * fu_mkhi_read_file_ex_request_new: (skip):
528
 **/
529
FuMkhiReadFileExRequest *
530
fu_mkhi_read_file_ex_request_new(void)
531
0
{
532
0
    FuMkhiReadFileExRequest *st = fu_mkhi_read_file_ex_request_new_internal();
533
0
    st->buf = g_byte_array_sized_new(17);
534
0
    fu_byte_array_set_size(st->buf, 17, 0x0);
535
0
    fu_mkhi_read_file_ex_request_set_group_id(st, FU_MKHI_GROUP_ID_MCA);
536
0
    fu_mkhi_read_file_ex_request_set_command(st, FU_MKHI_COMMAND_READ_FILE_EX);
537
0
    fu_mkhi_read_file_ex_request_set_result(st, 0x0);
538
0
    fu_mkhi_read_file_ex_request_set_offset(st, 0x0);
539
0
    return st;
540
0
}
541
/**
542
 * fu_mkhi_read_file_ex_response_ref: (skip):
543
 **/
544
FuMkhiReadFileExResponse *
545
fu_mkhi_read_file_ex_response_ref(FuMkhiReadFileExResponse *st)
546
0
{
547
0
    g_return_val_if_fail(st != NULL, NULL);
548
0
    st->refcount++;
549
0
    return st;
550
0
}
551
/**
552
 * fu_mkhi_read_file_ex_response_unref: (skip):
553
 **/
554
void
555
fu_mkhi_read_file_ex_response_unref(FuMkhiReadFileExResponse *st)
556
0
{
557
0
    g_return_if_fail(st != NULL);
558
0
    if (st->refcount == 0) {
559
0
        g_critical("FuMkhiReadFileExResponse refcount already zero");
560
0
        return;
561
0
    }
562
0
    if (--st->refcount > 0)
563
0
        return;
564
0
    if (st->buf != NULL)
565
0
        g_byte_array_unref(st->buf);
566
0
    g_free(st);
567
0
}
568
static FuMkhiReadFileExResponse *
569
fu_mkhi_read_file_ex_response_new_internal(void)
570
0
{
571
0
    FuMkhiReadFileExResponse *st = g_new0(FuMkhiReadFileExResponse, 1);
572
0
    st->refcount = 1;
573
0
    return st;
574
0
}
575
576
/* getters */
577
/**
578
 * fu_mkhi_read_file_ex_response_get_group_id: (skip):
579
 **/
580
static FuMkhiGroupId
581
fu_mkhi_read_file_ex_response_get_group_id(const FuMkhiReadFileExResponse *st)
582
0
{
583
0
    g_return_val_if_fail(st != NULL, 0x0);
584
0
    return st->buf->data[0];
585
0
}
586
/**
587
 * fu_mkhi_read_file_ex_response_get_command: (skip):
588
 **/
589
static FuMkhiCommand
590
fu_mkhi_read_file_ex_response_get_command(const FuMkhiReadFileExResponse *st)
591
0
{
592
0
    g_return_val_if_fail(st != NULL, 0x0);
593
0
    return st->buf->data[1];
594
0
}
595
/**
596
 * fu_mkhi_read_file_ex_response_get_result: (skip):
597
 **/
598
guint8
599
fu_mkhi_read_file_ex_response_get_result(const FuMkhiReadFileExResponse *st)
600
0
{
601
0
    g_return_val_if_fail(st != NULL, 0x0);
602
0
    return st->buf->data[3];
603
0
}
604
/**
605
 * fu_mkhi_read_file_ex_response_get_data_size: (skip):
606
 **/
607
guint32
608
fu_mkhi_read_file_ex_response_get_data_size(const FuMkhiReadFileExResponse *st)
609
0
{
610
0
    g_return_val_if_fail(st != NULL, 0x0);
611
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
612
0
}
613
614
/* setters */
615
/**
616
 * fu_mkhi_read_file_ex_response_to_string: (skip):
617
 **/
618
static gchar *
619
fu_mkhi_read_file_ex_response_to_string(const FuMkhiReadFileExResponse *st)
620
0
{
621
0
    g_autoptr(GString) str = g_string_new("FuMkhiReadFileExResponse:\n");
622
0
    g_return_val_if_fail(st != NULL, NULL);
623
0
    g_string_append_printf(str, "  result: 0x%x\n",
624
0
                           (guint) fu_mkhi_read_file_ex_response_get_result(st));
625
0
    g_string_append_printf(str, "  data_size: 0x%x\n",
626
0
                           (guint) fu_mkhi_read_file_ex_response_get_data_size(st));
627
0
    if (str->len > 0)
628
0
        g_string_set_size(str, str->len - 1);
629
0
    return g_string_free(g_steal_pointer(&str), FALSE);
630
0
}
631
static gboolean
632
fu_mkhi_read_file_ex_response_validate_internal(FuMkhiReadFileExResponse *st, GError **error)
633
0
{
634
0
    g_return_val_if_fail(st != NULL, FALSE);
635
0
    if (fu_mkhi_read_file_ex_response_get_group_id(st) != FU_MKHI_GROUP_ID_MCA) {
636
0
        g_set_error(error,
637
0
                    FWUPD_ERROR,
638
0
                    FWUPD_ERROR_INVALID_DATA,
639
0
                    "constant FuMkhiReadFileExResponse.group_id was not valid, "
640
0
                    "expected 'FuMkhiGroupId' and got '%s'",
641
0
                    fu_mkhi_group_id_to_string(fu_mkhi_read_file_ex_response_get_group_id(st)));
642
0
        return FALSE;
643
0
    }
644
0
    if (fu_mkhi_read_file_ex_response_get_command(st) != FU_MKHI_COMMAND_READ_FILE_EX_RESPONSE) {
645
0
        g_set_error(error,
646
0
                    FWUPD_ERROR,
647
0
                    FWUPD_ERROR_INVALID_DATA,
648
0
                    "constant FuMkhiReadFileExResponse.command was not valid, "
649
0
                    "expected 'FuMkhiCommand' and got '%s'",
650
0
                    fu_mkhi_command_to_string(fu_mkhi_read_file_ex_response_get_command(st)));
651
0
        return FALSE;
652
0
    }
653
0
    return TRUE;
654
0
}
655
static gboolean
656
fu_mkhi_read_file_ex_response_parse_internal(FuMkhiReadFileExResponse *st, GError **error)
657
0
{
658
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
659
0
        g_autofree gchar *str = fu_mkhi_read_file_ex_response_to_string(st);
660
0
        g_debug("%s", str);
661
0
    }
662
0
    if (!fu_mkhi_read_file_ex_response_validate_internal(st, error))
663
0
        return FALSE;
664
0
    return TRUE;
665
0
}
666
667
/**
668
 * fu_mkhi_read_file_ex_response_parse: (skip):
669
 **/
670
FuMkhiReadFileExResponse *
671
fu_mkhi_read_file_ex_response_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
672
0
{
673
0
    g_autoptr(FuMkhiReadFileExResponse) st = fu_mkhi_read_file_ex_response_new_internal();
674
0
    g_return_val_if_fail(buf != NULL, NULL);
675
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
676
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
677
0
        g_prefix_error_literal(error, "invalid struct FuMkhiReadFileExResponse: ");
678
0
        return NULL;
679
0
    }
680
0
    st->buf = g_byte_array_new();
681
0
    g_byte_array_append(st->buf, buf + offset, 8);
682
0
    if (!fu_mkhi_read_file_ex_response_parse_internal(st, error))
683
0
        return NULL;
684
0
    return g_steal_pointer(&st);
685
0
}
686
/**
687
 * fu_mkhi_arbh_svn_info_entry_ref: (skip):
688
 **/
689
FuMkhiArbhSvnInfoEntry *
690
fu_mkhi_arbh_svn_info_entry_ref(FuMkhiArbhSvnInfoEntry *st)
691
0
{
692
0
    g_return_val_if_fail(st != NULL, NULL);
693
0
    st->refcount++;
694
0
    return st;
695
0
}
696
/**
697
 * fu_mkhi_arbh_svn_info_entry_unref: (skip):
698
 **/
699
void
700
fu_mkhi_arbh_svn_info_entry_unref(FuMkhiArbhSvnInfoEntry *st)
701
0
{
702
0
    g_return_if_fail(st != NULL);
703
0
    if (st->refcount == 0) {
704
0
        g_critical("FuMkhiArbhSvnInfoEntry refcount already zero");
705
0
        return;
706
0
    }
707
0
    if (--st->refcount > 0)
708
0
        return;
709
0
    if (st->buf != NULL)
710
0
        g_byte_array_unref(st->buf);
711
0
    g_free(st);
712
0
}
713
static FuMkhiArbhSvnInfoEntry *
714
fu_mkhi_arbh_svn_info_entry_new_internal(void)
715
0
{
716
0
    FuMkhiArbhSvnInfoEntry *st = g_new0(FuMkhiArbhSvnInfoEntry, 1);
717
0
    st->refcount = 1;
718
0
    return st;
719
0
}
720
721
/* getters */
722
/**
723
 * fu_mkhi_arbh_svn_info_entry_get_usage_id: (skip):
724
 **/
725
FuMkhiArbhSvnInfoEntryUsageId
726
fu_mkhi_arbh_svn_info_entry_get_usage_id(const FuMkhiArbhSvnInfoEntry *st)
727
0
{
728
0
    g_return_val_if_fail(st != NULL, 0x0);
729
0
    return st->buf->data[0];
730
0
}
731
/**
732
 * fu_mkhi_arbh_svn_info_entry_get_executing: (skip):
733
 **/
734
guint8
735
fu_mkhi_arbh_svn_info_entry_get_executing(const FuMkhiArbhSvnInfoEntry *st)
736
0
{
737
0
    g_return_val_if_fail(st != NULL, 0x0);
738
0
    return st->buf->data[2];
739
0
}
740
/**
741
 * fu_mkhi_arbh_svn_info_entry_get_min_allowed: (skip):
742
 **/
743
guint8
744
fu_mkhi_arbh_svn_info_entry_get_min_allowed(const FuMkhiArbhSvnInfoEntry *st)
745
0
{
746
0
    g_return_val_if_fail(st != NULL, 0x0);
747
0
    return st->buf->data[3];
748
0
}
749
750
/* setters */
751
/**
752
 * fu_mkhi_arbh_svn_info_entry_to_string: (skip):
753
 **/
754
static gchar *
755
fu_mkhi_arbh_svn_info_entry_to_string(const FuMkhiArbhSvnInfoEntry *st)
756
0
{
757
0
    g_autoptr(GString) str = g_string_new("FuMkhiArbhSvnInfoEntry:\n");
758
0
    g_return_val_if_fail(st != NULL, NULL);
759
0
    {
760
0
        const gchar *tmp = fu_mkhi_arbh_svn_info_entry_usage_id_to_string(fu_mkhi_arbh_svn_info_entry_get_usage_id(st));
761
0
        if (tmp != NULL) {
762
0
            g_string_append_printf(str, "  usage_id: 0x%x [%s]\n", (guint) fu_mkhi_arbh_svn_info_entry_get_usage_id(st), tmp);
763
0
        } else {
764
0
            g_string_append_printf(str, "  usage_id: 0x%x\n", (guint) fu_mkhi_arbh_svn_info_entry_get_usage_id(st));
765
0
        }
766
0
    }
767
0
    g_string_append_printf(str, "  executing: 0x%x\n",
768
0
                           (guint) fu_mkhi_arbh_svn_info_entry_get_executing(st));
769
0
    g_string_append_printf(str, "  min_allowed: 0x%x\n",
770
0
                           (guint) fu_mkhi_arbh_svn_info_entry_get_min_allowed(st));
771
0
    if (str->len > 0)
772
0
        g_string_set_size(str, str->len - 1);
773
0
    return g_string_free(g_steal_pointer(&str), FALSE);
774
0
}
775
static gboolean
776
fu_mkhi_arbh_svn_info_entry_validate_internal(FuMkhiArbhSvnInfoEntry *st, GError **error)
777
0
{
778
0
    g_return_val_if_fail(st != NULL, FALSE);
779
0
    return TRUE;
780
0
}
781
static gboolean
782
fu_mkhi_arbh_svn_info_entry_parse_internal(FuMkhiArbhSvnInfoEntry *st, GError **error)
783
0
{
784
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
785
0
        g_autofree gchar *str = fu_mkhi_arbh_svn_info_entry_to_string(st);
786
0
        g_debug("%s", str);
787
0
    }
788
0
    if (!fu_mkhi_arbh_svn_info_entry_validate_internal(st, error))
789
0
        return FALSE;
790
0
    return TRUE;
791
0
}
792
793
/**
794
 * fu_mkhi_arbh_svn_info_entry_parse: (skip):
795
 **/
796
FuMkhiArbhSvnInfoEntry *
797
fu_mkhi_arbh_svn_info_entry_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
798
0
{
799
0
    g_autoptr(FuMkhiArbhSvnInfoEntry) st = fu_mkhi_arbh_svn_info_entry_new_internal();
800
0
    g_return_val_if_fail(buf != NULL, NULL);
801
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
802
0
    if (!fu_memchk_read(bufsz, offset, 4, error)) {
803
0
        g_prefix_error_literal(error, "invalid struct FuMkhiArbhSvnInfoEntry: ");
804
0
        return NULL;
805
0
    }
806
0
    st->buf = g_byte_array_new();
807
0
    g_byte_array_append(st->buf, buf + offset, 4);
808
0
    if (!fu_mkhi_arbh_svn_info_entry_parse_internal(st, error))
809
0
        return NULL;
810
0
    return g_steal_pointer(&st);
811
0
}
812
/**
813
 * fu_mkhi_arbh_svn_get_info_request_ref: (skip):
814
 **/
815
FuMkhiArbhSvnGetInfoRequest *
816
fu_mkhi_arbh_svn_get_info_request_ref(FuMkhiArbhSvnGetInfoRequest *st)
817
0
{
818
0
    g_return_val_if_fail(st != NULL, NULL);
819
0
    st->refcount++;
820
0
    return st;
821
0
}
822
/**
823
 * fu_mkhi_arbh_svn_get_info_request_unref: (skip):
824
 **/
825
void
826
fu_mkhi_arbh_svn_get_info_request_unref(FuMkhiArbhSvnGetInfoRequest *st)
827
0
{
828
0
    g_return_if_fail(st != NULL);
829
0
    if (st->refcount == 0) {
830
0
        g_critical("FuMkhiArbhSvnGetInfoRequest refcount already zero");
831
0
        return;
832
0
    }
833
0
    if (--st->refcount > 0)
834
0
        return;
835
0
    if (st->buf != NULL)
836
0
        g_byte_array_unref(st->buf);
837
0
    g_free(st);
838
0
}
839
static FuMkhiArbhSvnGetInfoRequest *
840
fu_mkhi_arbh_svn_get_info_request_new_internal(void)
841
0
{
842
0
    FuMkhiArbhSvnGetInfoRequest *st = g_new0(FuMkhiArbhSvnGetInfoRequest, 1);
843
0
    st->refcount = 1;
844
0
    return st;
845
0
}
846
847
/* getters */
848
849
/* setters */
850
/**
851
 * fu_mkhi_arbh_svn_get_info_request_set_group_id: (skip):
852
 **/
853
static void
854
fu_mkhi_arbh_svn_get_info_request_set_group_id(FuMkhiArbhSvnGetInfoRequest *st, FuMkhiGroupId value)
855
0
{
856
0
    g_return_if_fail(st != NULL);
857
0
    st->buf->data[0] = value;
858
0
}
859
/**
860
 * fu_mkhi_arbh_svn_get_info_request_set_command: (skip):
861
 **/
862
static void
863
fu_mkhi_arbh_svn_get_info_request_set_command(FuMkhiArbhSvnGetInfoRequest *st, FuMkhiCommand value)
864
0
{
865
0
    g_return_if_fail(st != NULL);
866
0
    st->buf->data[1] = value;
867
0
}
868
/**
869
 * fu_mkhi_arbh_svn_get_info_request_set_result: (skip):
870
 **/
871
static void
872
fu_mkhi_arbh_svn_get_info_request_set_result(FuMkhiArbhSvnGetInfoRequest *st, guint8 value)
873
0
{
874
0
    g_return_if_fail(st != NULL);
875
0
    st->buf->data[3] = value;
876
0
}
877
/**
878
 * fu_mkhi_arbh_svn_get_info_request_new: (skip):
879
 **/
880
FuMkhiArbhSvnGetInfoRequest *
881
fu_mkhi_arbh_svn_get_info_request_new(void)
882
0
{
883
0
    FuMkhiArbhSvnGetInfoRequest *st = fu_mkhi_arbh_svn_get_info_request_new_internal();
884
0
    st->buf = g_byte_array_sized_new(4);
885
0
    fu_byte_array_set_size(st->buf, 4, 0x0);
886
0
    fu_mkhi_arbh_svn_get_info_request_set_group_id(st, FU_MKHI_GROUP_ID_MCA);
887
0
    fu_mkhi_arbh_svn_get_info_request_set_command(st, FU_MKHI_COMMAND_ARBH_SVN_GET_INFO);
888
0
    fu_mkhi_arbh_svn_get_info_request_set_result(st, 0x0);
889
0
    return st;
890
0
}
891
/**
892
 * fu_mkhi_arbh_svn_get_info_response_ref: (skip):
893
 **/
894
FuMkhiArbhSvnGetInfoResponse *
895
fu_mkhi_arbh_svn_get_info_response_ref(FuMkhiArbhSvnGetInfoResponse *st)
896
0
{
897
0
    g_return_val_if_fail(st != NULL, NULL);
898
0
    st->refcount++;
899
0
    return st;
900
0
}
901
/**
902
 * fu_mkhi_arbh_svn_get_info_response_unref: (skip):
903
 **/
904
void
905
fu_mkhi_arbh_svn_get_info_response_unref(FuMkhiArbhSvnGetInfoResponse *st)
906
0
{
907
0
    g_return_if_fail(st != NULL);
908
0
    if (st->refcount == 0) {
909
0
        g_critical("FuMkhiArbhSvnGetInfoResponse refcount already zero");
910
0
        return;
911
0
    }
912
0
    if (--st->refcount > 0)
913
0
        return;
914
0
    if (st->buf != NULL)
915
0
        g_byte_array_unref(st->buf);
916
0
    g_free(st);
917
0
}
918
static FuMkhiArbhSvnGetInfoResponse *
919
fu_mkhi_arbh_svn_get_info_response_new_internal(void)
920
0
{
921
0
    FuMkhiArbhSvnGetInfoResponse *st = g_new0(FuMkhiArbhSvnGetInfoResponse, 1);
922
0
    st->refcount = 1;
923
0
    return st;
924
0
}
925
926
/* getters */
927
/**
928
 * fu_mkhi_arbh_svn_get_info_response_get_group_id: (skip):
929
 **/
930
static FuMkhiGroupId
931
fu_mkhi_arbh_svn_get_info_response_get_group_id(const FuMkhiArbhSvnGetInfoResponse *st)
932
0
{
933
0
    g_return_val_if_fail(st != NULL, 0x0);
934
0
    return st->buf->data[0];
935
0
}
936
/**
937
 * fu_mkhi_arbh_svn_get_info_response_get_command: (skip):
938
 **/
939
static FuMkhiCommand
940
fu_mkhi_arbh_svn_get_info_response_get_command(const FuMkhiArbhSvnGetInfoResponse *st)
941
0
{
942
0
    g_return_val_if_fail(st != NULL, 0x0);
943
0
    return st->buf->data[1];
944
0
}
945
/**
946
 * fu_mkhi_arbh_svn_get_info_response_get_result: (skip):
947
 **/
948
guint8
949
fu_mkhi_arbh_svn_get_info_response_get_result(const FuMkhiArbhSvnGetInfoResponse *st)
950
0
{
951
0
    g_return_val_if_fail(st != NULL, 0x0);
952
0
    return st->buf->data[3];
953
0
}
954
/**
955
 * fu_mkhi_arbh_svn_get_info_response_get_num_entries: (skip):
956
 **/
957
guint32
958
fu_mkhi_arbh_svn_get_info_response_get_num_entries(const FuMkhiArbhSvnGetInfoResponse *st)
959
0
{
960
0
    g_return_val_if_fail(st != NULL, 0x0);
961
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
962
0
}
963
964
/* setters */
965
/**
966
 * fu_mkhi_arbh_svn_get_info_response_to_string: (skip):
967
 **/
968
static gchar *
969
fu_mkhi_arbh_svn_get_info_response_to_string(const FuMkhiArbhSvnGetInfoResponse *st)
970
0
{
971
0
    g_autoptr(GString) str = g_string_new("FuMkhiArbhSvnGetInfoResponse:\n");
972
0
    g_return_val_if_fail(st != NULL, NULL);
973
0
    g_string_append_printf(str, "  result: 0x%x\n",
974
0
                           (guint) fu_mkhi_arbh_svn_get_info_response_get_result(st));
975
0
    g_string_append_printf(str, "  num_entries: 0x%x\n",
976
0
                           (guint) fu_mkhi_arbh_svn_get_info_response_get_num_entries(st));
977
0
    if (str->len > 0)
978
0
        g_string_set_size(str, str->len - 1);
979
0
    return g_string_free(g_steal_pointer(&str), FALSE);
980
0
}
981
static gboolean
982
fu_mkhi_arbh_svn_get_info_response_validate_internal(FuMkhiArbhSvnGetInfoResponse *st, GError **error)
983
0
{
984
0
    g_return_val_if_fail(st != NULL, FALSE);
985
0
    if (fu_mkhi_arbh_svn_get_info_response_get_group_id(st) != FU_MKHI_GROUP_ID_MCA) {
986
0
        g_set_error(error,
987
0
                    FWUPD_ERROR,
988
0
                    FWUPD_ERROR_INVALID_DATA,
989
0
                    "constant FuMkhiArbhSvnGetInfoResponse.group_id was not valid, "
990
0
                    "expected 'FuMkhiGroupId' and got '%s'",
991
0
                    fu_mkhi_group_id_to_string(fu_mkhi_arbh_svn_get_info_response_get_group_id(st)));
992
0
        return FALSE;
993
0
    }
994
0
    if (fu_mkhi_arbh_svn_get_info_response_get_command(st) != FU_MKHI_COMMAND_ARBH_SVN_GET_INFO_RESPONSE) {
995
0
        g_set_error(error,
996
0
                    FWUPD_ERROR,
997
0
                    FWUPD_ERROR_INVALID_DATA,
998
0
                    "constant FuMkhiArbhSvnGetInfoResponse.command was not valid, "
999
0
                    "expected 'FuMkhiCommand' and got '%s'",
1000
0
                    fu_mkhi_command_to_string(fu_mkhi_arbh_svn_get_info_response_get_command(st)));
1001
0
        return FALSE;
1002
0
    }
1003
0
    return TRUE;
1004
0
}
1005
static gboolean
1006
fu_mkhi_arbh_svn_get_info_response_parse_internal(FuMkhiArbhSvnGetInfoResponse *st, GError **error)
1007
0
{
1008
0
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
1009
0
        g_autofree gchar *str = fu_mkhi_arbh_svn_get_info_response_to_string(st);
1010
0
        g_debug("%s", str);
1011
0
    }
1012
0
    if (!fu_mkhi_arbh_svn_get_info_response_validate_internal(st, error))
1013
0
        return FALSE;
1014
0
    return TRUE;
1015
0
}
1016
1017
/**
1018
 * fu_mkhi_arbh_svn_get_info_response_parse: (skip):
1019
 **/
1020
FuMkhiArbhSvnGetInfoResponse *
1021
fu_mkhi_arbh_svn_get_info_response_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
1022
0
{
1023
0
    g_autoptr(FuMkhiArbhSvnGetInfoResponse) st = fu_mkhi_arbh_svn_get_info_response_new_internal();
1024
0
    g_return_val_if_fail(buf != NULL, NULL);
1025
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
1026
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
1027
0
        g_prefix_error_literal(error, "invalid struct FuMkhiArbhSvnGetInfoResponse: ");
1028
0
        return NULL;
1029
0
    }
1030
0
    st->buf = g_byte_array_new();
1031
0
    g_byte_array_append(st->buf, buf + offset, 8);
1032
0
    if (!fu_mkhi_arbh_svn_get_info_response_parse_internal(st, error))
1033
0
        return NULL;
1034
0
    return g_steal_pointer(&st);
1035
0
}