Fix CONFIG_OS=internal build

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2014-12-25 11:29:08 +02:00
parent 7d9286d3e7
commit ff013b94ca

View file

@ -17,9 +17,11 @@
*/ */
#include "includes.h" #include "includes.h"
#include <time.h>
#include <sys/wait.h>
#undef OS_REJECT_C_LIB_FUNCTIONS #undef OS_REJECT_C_LIB_FUNCTIONS
#include "os.h" #include "common.h"
void os_sleep(os_time_t sec, os_time_t usec) 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); cwd_len = os_strlen(cwd);
rel_len = strlen(rel_path); rel_len = os_strlen(rel_path);
ret_len = cwd_len + 1 + rel_len + 1; ret_len = cwd_len + 1 + rel_len + 1;
ret = os_malloc(ret_len); ret = os_malloc(ret_len);
if (ret) { if (ret) {
@ -506,3 +508,57 @@ int os_snprintf(char *str, size_t size, const char *format, ...)
str[size - 1] = '\0'; str[size - 1] = '\0';
return ret; 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;
}