mirror of
https://github.com/albfan/miraclecast.git
synced 2025-03-09 23:38:56 +00:00
find wpa_supplicant through PATH instead of option --wpa-bindir
This commit is contained in:
parent
7fc8d0884c
commit
4601514799
3 changed files with 49 additions and 15 deletions
|
|
@ -24,6 +24,7 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <systemd/sd-event.h>
|
||||
#include <systemd/sd-journal.h>
|
||||
|
|
@ -2401,6 +2402,49 @@ static void supplicant_run(struct supplicant *s, const char *binary)
|
|||
execve(argv[0], argv, environ);
|
||||
}
|
||||
|
||||
static int supplicant_find(char **binary)
|
||||
{
|
||||
_shl_free_ char *path = getenv("PATH");
|
||||
if(!path) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
path = strdup(path);
|
||||
if(!path) {
|
||||
return log_ENOMEM();
|
||||
}
|
||||
|
||||
struct stat bin_stat;
|
||||
char *curr = path, *next;
|
||||
while(1) {
|
||||
curr = strtok_r(curr, ":", &next);
|
||||
if(!curr) {
|
||||
break;
|
||||
}
|
||||
|
||||
_shl_free_ char *bin = shl_strcat(curr, "/wpa_supplicant");
|
||||
if (!bin)
|
||||
return log_ENOMEM();
|
||||
|
||||
if(stat(bin, &bin_stat) < 0) {
|
||||
if(ENOENT == errno) {
|
||||
goto end;
|
||||
}
|
||||
return log_ERRNO();
|
||||
}
|
||||
|
||||
if (!access(bin, X_OK)) {
|
||||
*binary = strdup(bin);
|
||||
return 0;
|
||||
}
|
||||
|
||||
end:
|
||||
curr = NULL;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int supplicant_spawn(struct supplicant *s)
|
||||
{
|
||||
_shl_free_ char *binary = NULL;
|
||||
|
|
@ -2414,14 +2458,12 @@ static int supplicant_spawn(struct supplicant *s)
|
|||
|
||||
log_debug("spawn supplicant of %s", s->l->ifname);
|
||||
|
||||
binary = shl_strcat(arg_wpa_bindir, "/wpa_supplicant");
|
||||
if (!binary)
|
||||
return log_ENOMEM();
|
||||
if (supplicant_find(&binary) < 0) {
|
||||
log_error("execution of wpas (%s) not possible: %m", binary);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (access(binary, X_OK) < 0) {
|
||||
log_error("execution of wpas (%s) not possible: %m", binary);
|
||||
return -EINVAL;
|
||||
}
|
||||
log_info("wpa_supplicant found: %s", binary);
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue