mirror of
https://git.yoctoproject.org/poky
synced 2026-09-20 03:49:32 +02:00
qemu-helper-native: Correctly pass program name as argv[0]
The previous version of this wasn't correctly passing the program name as argv[0], and was also over-complicated anyway because argv[] is guaranteed to be terminated with a NULL pointer, so it can be passed directly to the execv'd process without needing to be copied. (From OE-Core rev: c8b7a0570903fc7916530c2fcffaee3b61f27301) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> (cherry picked from commit 6edf38add3c20c44efe0588e2815bb280d22e0c4) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
69cf7cc720
commit
f237fd313e
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
void try_program(char const* path, char** args) {
|
void try_program(char const* path, char** args) {
|
||||||
if (access(path, X_OK) == 0) {
|
if (access(path, X_OK) == 0) {
|
||||||
@@ -18,22 +19,14 @@ void try_program(char const* path, char** args) {
|
|||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
char* var;
|
char* var;
|
||||||
|
|
||||||
/* Copy arguments so that they are a NULL terminated list, skipping argv[0]
|
|
||||||
* since it is this program name */
|
|
||||||
char** args = malloc(argc * sizeof(char*));
|
|
||||||
for (int i = 0; i < argc - 1; i++) {
|
|
||||||
args[i] = argv[i + 1];
|
|
||||||
}
|
|
||||||
args[argc - 1] = NULL;
|
|
||||||
|
|
||||||
var = getenv("QEMU_BRIDGE_HELPER");
|
var = getenv("QEMU_BRIDGE_HELPER");
|
||||||
if (var && var[0] != '\0') {
|
if (var && var[0] != '\0') {
|
||||||
execvp(var, args);
|
execvp(var, argv);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
try_program("/usr/libexec/qemu-bridge-helper", args);
|
try_program("/usr/libexec/qemu-bridge-helper", argv);
|
||||||
try_program("/usr/lib/qemu/qemu-bridge-helper", args);
|
try_program("/usr/lib/qemu/qemu-bridge-helper", argv);
|
||||||
|
|
||||||
fprintf(stderr, "No bridge helper found\n");
|
fprintf(stderr, "No bridge helper found\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user