Fix CONFIG_OS=internal build
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
7d9286d3e7
commit
ff013b94ca
1 changed files with 59 additions and 3 deletions
|
@ -17,9 +17,11 @@
|
|||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include <time.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
#undef OS_REJECT_C_LIB_FUNCTIONS
|
||||
#include "os.h"
|
||||
#include "common.h"
|
||||
|
||||
void os_sleep(os_time_t sec, os_time_t usec)
|
||||
{
|
||||
|
@ -167,8 +169,8 @@ char * os_rel2abs_path(const char *rel_path)
|
|||
}
|
||||
}
|
||||
|
||||
cwd_len = strlen(cwd);
|
||||
rel_len = strlen(rel_path);
|
||||
cwd_len = os_strlen(cwd);
|
||||
rel_len = os_strlen(rel_path);
|
||||
ret_len = cwd_len + 1 + rel_len + 1;
|
||||
ret = os_malloc(ret_len);
|
||||
if (ret) {
|
||||
|
@ -506,3 +508,57 @@ int os_snprintf(char *str, size_t size, const char *format, ...)
|
|||
str[size - 1] = '\0';
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int os_exec(const char *program, const char *arg, int wait_completion)
|
||||
{
|
||||
pid_t pid;
|
||||
int pid_status;
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0) {
|
||||
wpa_printf(MSG_ERROR, "fork: %s", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pid == 0) {
|
||||
/* run the external command in the child process */
|
||||
const int MAX_ARG = 30;
|
||||
char *_program, *_arg, *pos;
|
||||
char *argv[MAX_ARG + 1];
|
||||
int i;
|
||||
|
||||
_program = os_strdup(program);
|
||||
_arg = os_strdup(arg);
|
||||
|
||||
argv[0] = _program;
|
||||
|
||||
i = 1;
|
||||
pos = _arg;
|
||||
while (i < MAX_ARG && pos && *pos) {
|
||||
while (*pos == ' ')
|
||||
pos++;
|
||||
if (*pos == '\0')
|
||||
break;
|
||||
argv[i++] = pos;
|
||||
pos = os_strchr(pos, ' ');
|
||||
if (pos)
|
||||
*pos++ = '\0';
|
||||
}
|
||||
argv[i] = NULL;
|
||||
|
||||
execv(program, argv);
|
||||
wpa_printf(MSG_ERROR, "execv: %s", strerror(errno));
|
||||
os_free(_program);
|
||||
os_free(_arg);
|
||||
exit(0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (wait_completion) {
|
||||
/* wait for the child process to complete in the parent */
|
||||
waitpid(pid, &pid_status, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue