blob: c34aa00567e6fc855e3eafdfbe5a839d4808f1f3 [file] [log] [blame]
Patrick Williams2390b1b2022-11-03 13:47:49 -05001/*
2 * Copyright 2022 Garmin Ltd. or its subsidiaries
3 *
4 * SPDX-License-Identifier: GPL-2.0
5 *
6 * Attempts to find and exec the host qemu-bridge-helper program
7 */
8
9#include <stdio.h>
Patrick Williams520786c2023-06-25 16:20:36 -050010#include <string.h>
Patrick Williams2390b1b2022-11-03 13:47:49 -050011#include <unistd.h>
Andrew Geissler517393d2023-01-13 08:55:19 -060012#include <stdlib.h>
Patrick Williams2390b1b2022-11-03 13:47:49 -050013
14void try_program(char const* path, char** args) {
15 if (access(path, X_OK) == 0) {
16 execv(path, args);
17 }
18}
19
20int main(int argc, char** argv) {
21 char* var;
22
Patrick Williams2390b1b2022-11-03 13:47:49 -050023 var = getenv("QEMU_BRIDGE_HELPER");
24 if (var && var[0] != '\0') {
Andrew Geissler517393d2023-01-13 08:55:19 -060025 execvp(var, argv);
Patrick Williams2390b1b2022-11-03 13:47:49 -050026 return 1;
27 }
28
Patrick Williams520786c2023-06-25 16:20:36 -050029 if (argc == 2 && strcmp(argv[1], "--help") == 0) {
30 fprintf(stderr, "Helper function to find and exec qemu-bridge-helper. Set QEMU_BRIDGE_HELPER to override default search path\n");
31 return 0;
32 }
33
Andrew Geissler517393d2023-01-13 08:55:19 -060034 try_program("/usr/libexec/qemu-bridge-helper", argv);
35 try_program("/usr/lib/qemu/qemu-bridge-helper", argv);
Patrick Williams2390b1b2022-11-03 13:47:49 -050036
37 fprintf(stderr, "No bridge helper found\n");
38 return 1;
39}
40