1/* AUTOMATICALLY GENERATED, DO NOT MODIFY */
2
3/*
4 * Schema-defined QAPI visitors
5 *
6 * Copyright IBM, Corp. 2011
7 * Copyright (C) 2014-2018 Red Hat, Inc.
8 *
9 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10 * See the COPYING.LIB file in the top-level directory.
11 */
12
13#include "qemu/osdep.h"
14#include "qapi/error.h"
15#include "qapi/qmp/qerror.h"
16#include "qapi-visit-audio.h"
17
18void visit_type_AudiodevPerDirectionOptions_members(Visitor *v, AudiodevPerDirectionOptions *obj, Error **errp)
19{
20 Error *err = NULL;
21
22 if (visit_optional(v, "fixed-settings", &obj->has_fixed_settings)) {
23 visit_type_bool(v, "fixed-settings", &obj->fixed_settings, &err);
24 if (err) {
25 goto out;
26 }
27 }
28 if (visit_optional(v, "frequency", &obj->has_frequency)) {
29 visit_type_uint32(v, "frequency", &obj->frequency, &err);
30 if (err) {
31 goto out;
32 }
33 }
34 if (visit_optional(v, "channels", &obj->has_channels)) {
35 visit_type_uint32(v, "channels", &obj->channels, &err);
36 if (err) {
37 goto out;
38 }
39 }
40 if (visit_optional(v, "voices", &obj->has_voices)) {
41 visit_type_uint32(v, "voices", &obj->voices, &err);
42 if (err) {
43 goto out;
44 }
45 }
46 if (visit_optional(v, "format", &obj->has_format)) {
47 visit_type_AudioFormat(v, "format", &obj->format, &err);
48 if (err) {
49 goto out;
50 }
51 }
52 if (visit_optional(v, "buffer-length", &obj->has_buffer_length)) {
53 visit_type_uint32(v, "buffer-length", &obj->buffer_length, &err);
54 if (err) {
55 goto out;
56 }
57 }
58
59out:
60 error_propagate(errp, err);
61}
62
63void visit_type_AudiodevPerDirectionOptions(Visitor *v, const char *name, AudiodevPerDirectionOptions **obj, Error **errp)
64{
65 Error *err = NULL;
66
67 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevPerDirectionOptions), &err);
68 if (err) {
69 goto out;
70 }
71 if (!*obj) {
72 goto out_obj;
73 }
74 visit_type_AudiodevPerDirectionOptions_members(v, *obj, &err);
75 if (err) {
76 goto out_obj;
77 }
78 visit_check_struct(v, &err);
79out_obj:
80 visit_end_struct(v, (void **)obj);
81 if (err && visit_is_input(v)) {
82 qapi_free_AudiodevPerDirectionOptions(*obj);
83 *obj = NULL;
84 }
85out:
86 error_propagate(errp, err);
87}
88
89void visit_type_AudiodevGenericOptions_members(Visitor *v, AudiodevGenericOptions *obj, Error **errp)
90{
91 Error *err = NULL;
92
93 if (visit_optional(v, "in", &obj->has_in)) {
94 visit_type_AudiodevPerDirectionOptions(v, "in", &obj->in, &err);
95 if (err) {
96 goto out;
97 }
98 }
99 if (visit_optional(v, "out", &obj->has_out)) {
100 visit_type_AudiodevPerDirectionOptions(v, "out", &obj->out, &err);
101 if (err) {
102 goto out;
103 }
104 }
105
106out:
107 error_propagate(errp, err);
108}
109
110void visit_type_AudiodevGenericOptions(Visitor *v, const char *name, AudiodevGenericOptions **obj, Error **errp)
111{
112 Error *err = NULL;
113
114 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevGenericOptions), &err);
115 if (err) {
116 goto out;
117 }
118 if (!*obj) {
119 goto out_obj;
120 }
121 visit_type_AudiodevGenericOptions_members(v, *obj, &err);
122 if (err) {
123 goto out_obj;
124 }
125 visit_check_struct(v, &err);
126out_obj:
127 visit_end_struct(v, (void **)obj);
128 if (err && visit_is_input(v)) {
129 qapi_free_AudiodevGenericOptions(*obj);
130 *obj = NULL;
131 }
132out:
133 error_propagate(errp, err);
134}
135
136void visit_type_AudiodevAlsaPerDirectionOptions_members(Visitor *v, AudiodevAlsaPerDirectionOptions *obj, Error **errp)
137{
138 Error *err = NULL;
139
140 visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err);
141 if (err) {
142 goto out;
143 }
144 if (visit_optional(v, "dev", &obj->has_dev)) {
145 visit_type_str(v, "dev", &obj->dev, &err);
146 if (err) {
147 goto out;
148 }
149 }
150 if (visit_optional(v, "period-length", &obj->has_period_length)) {
151 visit_type_uint32(v, "period-length", &obj->period_length, &err);
152 if (err) {
153 goto out;
154 }
155 }
156 if (visit_optional(v, "try-poll", &obj->has_try_poll)) {
157 visit_type_bool(v, "try-poll", &obj->try_poll, &err);
158 if (err) {
159 goto out;
160 }
161 }
162
163out:
164 error_propagate(errp, err);
165}
166
167void visit_type_AudiodevAlsaPerDirectionOptions(Visitor *v, const char *name, AudiodevAlsaPerDirectionOptions **obj, Error **errp)
168{
169 Error *err = NULL;
170
171 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevAlsaPerDirectionOptions), &err);
172 if (err) {
173 goto out;
174 }
175 if (!*obj) {
176 goto out_obj;
177 }
178 visit_type_AudiodevAlsaPerDirectionOptions_members(v, *obj, &err);
179 if (err) {
180 goto out_obj;
181 }
182 visit_check_struct(v, &err);
183out_obj:
184 visit_end_struct(v, (void **)obj);
185 if (err && visit_is_input(v)) {
186 qapi_free_AudiodevAlsaPerDirectionOptions(*obj);
187 *obj = NULL;
188 }
189out:
190 error_propagate(errp, err);
191}
192
193void visit_type_AudiodevAlsaOptions_members(Visitor *v, AudiodevAlsaOptions *obj, Error **errp)
194{
195 Error *err = NULL;
196
197 if (visit_optional(v, "in", &obj->has_in)) {
198 visit_type_AudiodevAlsaPerDirectionOptions(v, "in", &obj->in, &err);
199 if (err) {
200 goto out;
201 }
202 }
203 if (visit_optional(v, "out", &obj->has_out)) {
204 visit_type_AudiodevAlsaPerDirectionOptions(v, "out", &obj->out, &err);
205 if (err) {
206 goto out;
207 }
208 }
209 if (visit_optional(v, "threshold", &obj->has_threshold)) {
210 visit_type_uint32(v, "threshold", &obj->threshold, &err);
211 if (err) {
212 goto out;
213 }
214 }
215
216out:
217 error_propagate(errp, err);
218}
219
220void visit_type_AudiodevAlsaOptions(Visitor *v, const char *name, AudiodevAlsaOptions **obj, Error **errp)
221{
222 Error *err = NULL;
223
224 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevAlsaOptions), &err);
225 if (err) {
226 goto out;
227 }
228 if (!*obj) {
229 goto out_obj;
230 }
231 visit_type_AudiodevAlsaOptions_members(v, *obj, &err);
232 if (err) {
233 goto out_obj;
234 }
235 visit_check_struct(v, &err);
236out_obj:
237 visit_end_struct(v, (void **)obj);
238 if (err && visit_is_input(v)) {
239 qapi_free_AudiodevAlsaOptions(*obj);
240 *obj = NULL;
241 }
242out:
243 error_propagate(errp, err);
244}
245
246void visit_type_AudiodevCoreaudioPerDirectionOptions_members(Visitor *v, AudiodevCoreaudioPerDirectionOptions *obj, Error **errp)
247{
248 Error *err = NULL;
249
250 visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err);
251 if (err) {
252 goto out;
253 }
254 if (visit_optional(v, "buffer-count", &obj->has_buffer_count)) {
255 visit_type_uint32(v, "buffer-count", &obj->buffer_count, &err);
256 if (err) {
257 goto out;
258 }
259 }
260
261out:
262 error_propagate(errp, err);
263}
264
265void visit_type_AudiodevCoreaudioPerDirectionOptions(Visitor *v, const char *name, AudiodevCoreaudioPerDirectionOptions **obj, Error **errp)
266{
267 Error *err = NULL;
268
269 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevCoreaudioPerDirectionOptions), &err);
270 if (err) {
271 goto out;
272 }
273 if (!*obj) {
274 goto out_obj;
275 }
276 visit_type_AudiodevCoreaudioPerDirectionOptions_members(v, *obj, &err);
277 if (err) {
278 goto out_obj;
279 }
280 visit_check_struct(v, &err);
281out_obj:
282 visit_end_struct(v, (void **)obj);
283 if (err && visit_is_input(v)) {
284 qapi_free_AudiodevCoreaudioPerDirectionOptions(*obj);
285 *obj = NULL;
286 }
287out:
288 error_propagate(errp, err);
289}
290
291void visit_type_AudiodevCoreaudioOptions_members(Visitor *v, AudiodevCoreaudioOptions *obj, Error **errp)
292{
293 Error *err = NULL;
294
295 if (visit_optional(v, "in", &obj->has_in)) {
296 visit_type_AudiodevCoreaudioPerDirectionOptions(v, "in", &obj->in, &err);
297 if (err) {
298 goto out;
299 }
300 }
301 if (visit_optional(v, "out", &obj->has_out)) {
302 visit_type_AudiodevCoreaudioPerDirectionOptions(v, "out", &obj->out, &err);
303 if (err) {
304 goto out;
305 }
306 }
307
308out:
309 error_propagate(errp, err);
310}
311
312void visit_type_AudiodevCoreaudioOptions(Visitor *v, const char *name, AudiodevCoreaudioOptions **obj, Error **errp)
313{
314 Error *err = NULL;
315
316 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevCoreaudioOptions), &err);
317 if (err) {
318 goto out;
319 }
320 if (!*obj) {
321 goto out_obj;
322 }
323 visit_type_AudiodevCoreaudioOptions_members(v, *obj, &err);
324 if (err) {
325 goto out_obj;
326 }
327 visit_check_struct(v, &err);
328out_obj:
329 visit_end_struct(v, (void **)obj);
330 if (err && visit_is_input(v)) {
331 qapi_free_AudiodevCoreaudioOptions(*obj);
332 *obj = NULL;
333 }
334out:
335 error_propagate(errp, err);
336}
337
338void visit_type_AudiodevDsoundOptions_members(Visitor *v, AudiodevDsoundOptions *obj, Error **errp)
339{
340 Error *err = NULL;
341
342 if (visit_optional(v, "in", &obj->has_in)) {
343 visit_type_AudiodevPerDirectionOptions(v, "in", &obj->in, &err);
344 if (err) {
345 goto out;
346 }
347 }
348 if (visit_optional(v, "out", &obj->has_out)) {
349 visit_type_AudiodevPerDirectionOptions(v, "out", &obj->out, &err);
350 if (err) {
351 goto out;
352 }
353 }
354 if (visit_optional(v, "latency", &obj->has_latency)) {
355 visit_type_uint32(v, "latency", &obj->latency, &err);
356 if (err) {
357 goto out;
358 }
359 }
360
361out:
362 error_propagate(errp, err);
363}
364
365void visit_type_AudiodevDsoundOptions(Visitor *v, const char *name, AudiodevDsoundOptions **obj, Error **errp)
366{
367 Error *err = NULL;
368
369 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevDsoundOptions), &err);
370 if (err) {
371 goto out;
372 }
373 if (!*obj) {
374 goto out_obj;
375 }
376 visit_type_AudiodevDsoundOptions_members(v, *obj, &err);
377 if (err) {
378 goto out_obj;
379 }
380 visit_check_struct(v, &err);
381out_obj:
382 visit_end_struct(v, (void **)obj);
383 if (err && visit_is_input(v)) {
384 qapi_free_AudiodevDsoundOptions(*obj);
385 *obj = NULL;
386 }
387out:
388 error_propagate(errp, err);
389}
390
391void visit_type_AudiodevOssPerDirectionOptions_members(Visitor *v, AudiodevOssPerDirectionOptions *obj, Error **errp)
392{
393 Error *err = NULL;
394
395 visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err);
396 if (err) {
397 goto out;
398 }
399 if (visit_optional(v, "dev", &obj->has_dev)) {
400 visit_type_str(v, "dev", &obj->dev, &err);
401 if (err) {
402 goto out;
403 }
404 }
405 if (visit_optional(v, "buffer-count", &obj->has_buffer_count)) {
406 visit_type_uint32(v, "buffer-count", &obj->buffer_count, &err);
407 if (err) {
408 goto out;
409 }
410 }
411 if (visit_optional(v, "try-poll", &obj->has_try_poll)) {
412 visit_type_bool(v, "try-poll", &obj->try_poll, &err);
413 if (err) {
414 goto out;
415 }
416 }
417
418out:
419 error_propagate(errp, err);
420}
421
422void visit_type_AudiodevOssPerDirectionOptions(Visitor *v, const char *name, AudiodevOssPerDirectionOptions **obj, Error **errp)
423{
424 Error *err = NULL;
425
426 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevOssPerDirectionOptions), &err);
427 if (err) {
428 goto out;
429 }
430 if (!*obj) {
431 goto out_obj;
432 }
433 visit_type_AudiodevOssPerDirectionOptions_members(v, *obj, &err);
434 if (err) {
435 goto out_obj;
436 }
437 visit_check_struct(v, &err);
438out_obj:
439 visit_end_struct(v, (void **)obj);
440 if (err && visit_is_input(v)) {
441 qapi_free_AudiodevOssPerDirectionOptions(*obj);
442 *obj = NULL;
443 }
444out:
445 error_propagate(errp, err);
446}
447
448void visit_type_AudiodevOssOptions_members(Visitor *v, AudiodevOssOptions *obj, Error **errp)
449{
450 Error *err = NULL;
451
452 if (visit_optional(v, "in", &obj->has_in)) {
453 visit_type_AudiodevOssPerDirectionOptions(v, "in", &obj->in, &err);
454 if (err) {
455 goto out;
456 }
457 }
458 if (visit_optional(v, "out", &obj->has_out)) {
459 visit_type_AudiodevOssPerDirectionOptions(v, "out", &obj->out, &err);
460 if (err) {
461 goto out;
462 }
463 }
464 if (visit_optional(v, "try-mmap", &obj->has_try_mmap)) {
465 visit_type_bool(v, "try-mmap", &obj->try_mmap, &err);
466 if (err) {
467 goto out;
468 }
469 }
470 if (visit_optional(v, "exclusive", &obj->has_exclusive)) {
471 visit_type_bool(v, "exclusive", &obj->exclusive, &err);
472 if (err) {
473 goto out;
474 }
475 }
476 if (visit_optional(v, "dsp-policy", &obj->has_dsp_policy)) {
477 visit_type_uint32(v, "dsp-policy", &obj->dsp_policy, &err);
478 if (err) {
479 goto out;
480 }
481 }
482
483out:
484 error_propagate(errp, err);
485}
486
487void visit_type_AudiodevOssOptions(Visitor *v, const char *name, AudiodevOssOptions **obj, Error **errp)
488{
489 Error *err = NULL;
490
491 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevOssOptions), &err);
492 if (err) {
493 goto out;
494 }
495 if (!*obj) {
496 goto out_obj;
497 }
498 visit_type_AudiodevOssOptions_members(v, *obj, &err);
499 if (err) {
500 goto out_obj;
501 }
502 visit_check_struct(v, &err);
503out_obj:
504 visit_end_struct(v, (void **)obj);
505 if (err && visit_is_input(v)) {
506 qapi_free_AudiodevOssOptions(*obj);
507 *obj = NULL;
508 }
509out:
510 error_propagate(errp, err);
511}
512
513void visit_type_AudiodevPaPerDirectionOptions_members(Visitor *v, AudiodevPaPerDirectionOptions *obj, Error **errp)
514{
515 Error *err = NULL;
516
517 visit_type_AudiodevPerDirectionOptions_members(v, (AudiodevPerDirectionOptions *)obj, &err);
518 if (err) {
519 goto out;
520 }
521 if (visit_optional(v, "name", &obj->has_name)) {
522 visit_type_str(v, "name", &obj->name, &err);
523 if (err) {
524 goto out;
525 }
526 }
527 if (visit_optional(v, "latency", &obj->has_latency)) {
528 visit_type_uint32(v, "latency", &obj->latency, &err);
529 if (err) {
530 goto out;
531 }
532 }
533
534out:
535 error_propagate(errp, err);
536}
537
538void visit_type_AudiodevPaPerDirectionOptions(Visitor *v, const char *name, AudiodevPaPerDirectionOptions **obj, Error **errp)
539{
540 Error *err = NULL;
541
542 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevPaPerDirectionOptions), &err);
543 if (err) {
544 goto out;
545 }
546 if (!*obj) {
547 goto out_obj;
548 }
549 visit_type_AudiodevPaPerDirectionOptions_members(v, *obj, &err);
550 if (err) {
551 goto out_obj;
552 }
553 visit_check_struct(v, &err);
554out_obj:
555 visit_end_struct(v, (void **)obj);
556 if (err && visit_is_input(v)) {
557 qapi_free_AudiodevPaPerDirectionOptions(*obj);
558 *obj = NULL;
559 }
560out:
561 error_propagate(errp, err);
562}
563
564void visit_type_AudiodevPaOptions_members(Visitor *v, AudiodevPaOptions *obj, Error **errp)
565{
566 Error *err = NULL;
567
568 if (visit_optional(v, "in", &obj->has_in)) {
569 visit_type_AudiodevPaPerDirectionOptions(v, "in", &obj->in, &err);
570 if (err) {
571 goto out;
572 }
573 }
574 if (visit_optional(v, "out", &obj->has_out)) {
575 visit_type_AudiodevPaPerDirectionOptions(v, "out", &obj->out, &err);
576 if (err) {
577 goto out;
578 }
579 }
580 if (visit_optional(v, "server", &obj->has_server)) {
581 visit_type_str(v, "server", &obj->server, &err);
582 if (err) {
583 goto out;
584 }
585 }
586
587out:
588 error_propagate(errp, err);
589}
590
591void visit_type_AudiodevPaOptions(Visitor *v, const char *name, AudiodevPaOptions **obj, Error **errp)
592{
593 Error *err = NULL;
594
595 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevPaOptions), &err);
596 if (err) {
597 goto out;
598 }
599 if (!*obj) {
600 goto out_obj;
601 }
602 visit_type_AudiodevPaOptions_members(v, *obj, &err);
603 if (err) {
604 goto out_obj;
605 }
606 visit_check_struct(v, &err);
607out_obj:
608 visit_end_struct(v, (void **)obj);
609 if (err && visit_is_input(v)) {
610 qapi_free_AudiodevPaOptions(*obj);
611 *obj = NULL;
612 }
613out:
614 error_propagate(errp, err);
615}
616
617void visit_type_AudiodevWavOptions_members(Visitor *v, AudiodevWavOptions *obj, Error **errp)
618{
619 Error *err = NULL;
620
621 if (visit_optional(v, "in", &obj->has_in)) {
622 visit_type_AudiodevPerDirectionOptions(v, "in", &obj->in, &err);
623 if (err) {
624 goto out;
625 }
626 }
627 if (visit_optional(v, "out", &obj->has_out)) {
628 visit_type_AudiodevPerDirectionOptions(v, "out", &obj->out, &err);
629 if (err) {
630 goto out;
631 }
632 }
633 if (visit_optional(v, "path", &obj->has_path)) {
634 visit_type_str(v, "path", &obj->path, &err);
635 if (err) {
636 goto out;
637 }
638 }
639
640out:
641 error_propagate(errp, err);
642}
643
644void visit_type_AudiodevWavOptions(Visitor *v, const char *name, AudiodevWavOptions **obj, Error **errp)
645{
646 Error *err = NULL;
647
648 visit_start_struct(v, name, (void **)obj, sizeof(AudiodevWavOptions), &err);
649 if (err) {
650 goto out;
651 }
652 if (!*obj) {
653 goto out_obj;
654 }
655 visit_type_AudiodevWavOptions_members(v, *obj, &err);
656 if (err) {
657 goto out_obj;
658 }
659 visit_check_struct(v, &err);
660out_obj:
661 visit_end_struct(v, (void **)obj);
662 if (err && visit_is_input(v)) {
663 qapi_free_AudiodevWavOptions(*obj);
664 *obj = NULL;
665 }
666out:
667 error_propagate(errp, err);
668}
669
670void visit_type_AudioFormat(Visitor *v, const char *name, AudioFormat *obj, Error **errp)
671{
672 int value = *obj;
673 visit_type_enum(v, name, &value, &AudioFormat_lookup, errp);
674 *obj = value;
675}
676
677void visit_type_AudiodevDriver(Visitor *v, const char *name, AudiodevDriver *obj, Error **errp)
678{
679 int value = *obj;
680 visit_type_enum(v, name, &value, &AudiodevDriver_lookup, errp);
681 *obj = value;
682}
683
684void visit_type_q_obj_Audiodev_base_members(Visitor *v, q_obj_Audiodev_base *obj, Error **errp)
685{
686 Error *err = NULL;
687
688 visit_type_str(v, "id", &obj->id, &err);
689 if (err) {
690 goto out;
691 }
692 visit_type_AudiodevDriver(v, "driver", &obj->driver, &err);
693 if (err) {
694 goto out;
695 }
696 if (visit_optional(v, "timer-period", &obj->has_timer_period)) {
697 visit_type_uint32(v, "timer-period", &obj->timer_period, &err);
698 if (err) {
699 goto out;
700 }
701 }
702
703out:
704 error_propagate(errp, err);
705}
706
707void visit_type_Audiodev_members(Visitor *v, Audiodev *obj, Error **errp)
708{
709 Error *err = NULL;
710
711 visit_type_q_obj_Audiodev_base_members(v, (q_obj_Audiodev_base *)obj, &err);
712 if (err) {
713 goto out;
714 }
715 switch (obj->driver) {
716 case AUDIODEV_DRIVER_NONE:
717 visit_type_AudiodevGenericOptions_members(v, &obj->u.none, &err);
718 break;
719 case AUDIODEV_DRIVER_ALSA:
720 visit_type_AudiodevAlsaOptions_members(v, &obj->u.alsa, &err);
721 break;
722 case AUDIODEV_DRIVER_COREAUDIO:
723 visit_type_AudiodevCoreaudioOptions_members(v, &obj->u.coreaudio, &err);
724 break;
725 case AUDIODEV_DRIVER_DSOUND:
726 visit_type_AudiodevDsoundOptions_members(v, &obj->u.dsound, &err);
727 break;
728 case AUDIODEV_DRIVER_OSS:
729 visit_type_AudiodevOssOptions_members(v, &obj->u.oss, &err);
730 break;
731 case AUDIODEV_DRIVER_PA:
732 visit_type_AudiodevPaOptions_members(v, &obj->u.pa, &err);
733 break;
734 case AUDIODEV_DRIVER_SDL:
735 visit_type_AudiodevGenericOptions_members(v, &obj->u.sdl, &err);
736 break;
737 case AUDIODEV_DRIVER_SPICE:
738 visit_type_AudiodevGenericOptions_members(v, &obj->u.spice, &err);
739 break;
740 case AUDIODEV_DRIVER_WAV:
741 visit_type_AudiodevWavOptions_members(v, &obj->u.wav, &err);
742 break;
743 default:
744 abort();
745 }
746
747out:
748 error_propagate(errp, err);
749}
750
751void visit_type_Audiodev(Visitor *v, const char *name, Audiodev **obj, Error **errp)
752{
753 Error *err = NULL;
754
755 visit_start_struct(v, name, (void **)obj, sizeof(Audiodev), &err);
756 if (err) {
757 goto out;
758 }
759 if (!*obj) {
760 goto out_obj;
761 }
762 visit_type_Audiodev_members(v, *obj, &err);
763 if (err) {
764 goto out_obj;
765 }
766 visit_check_struct(v, &err);
767out_obj:
768 visit_end_struct(v, (void **)obj);
769 if (err && visit_is_input(v)) {
770 qapi_free_Audiodev(*obj);
771 *obj = NULL;
772 }
773out:
774 error_propagate(errp, err);
775}
776
777/* Dummy declaration to prevent empty .o file */
778char qapi_dummy_qapi_visit_audio_c;
779