From f7a90fed874f9321489a2ec47fa9f704244e7075 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sun, 16 Sep 2018 18:59:36 +0200 Subject: package/network/services: adds, probably from OpenWRT --- ...d-os_exec-helper-to-run-external-programs.patch | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100755 package/network/services/hostapd/patches/002-Add-os_exec-helper-to-run-external-programs.patch (limited to 'package/network/services/hostapd/patches/002-Add-os_exec-helper-to-run-external-programs.patch') diff --git a/package/network/services/hostapd/patches/002-Add-os_exec-helper-to-run-external-programs.patch b/package/network/services/hostapd/patches/002-Add-os_exec-helper-to-run-external-programs.patch new file mode 100755 index 0000000..c1db046 --- /dev/null +++ b/package/network/services/hostapd/patches/002-Add-os_exec-helper-to-run-external-programs.patch @@ -0,0 +1,110 @@ +From 89de07a9442072f88d49869d8ecd8d42bae050a0 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Mon, 6 Oct 2014 16:27:44 +0300 +Subject: [PATCH 1/3] Add os_exec() helper to run external programs + +Signed-off-by: Jouni Malinen +--- + src/utils/os.h | 9 +++++++++ + src/utils/os_unix.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/utils/os_win32.c | 6 ++++++ + 3 files changed, 70 insertions(+) + +--- a/src/utils/os.h ++++ b/src/utils/os.h +@@ -584,6 +584,15 @@ static inline void os_remove_in_array(vo + */ + size_t os_strlcpy(char *dest, const char *src, size_t siz); + ++/** ++ * os_exec - Execute an external program ++ * @program: Path to the program ++ * @arg: Command line argument string ++ * @wait_completion: Whether to wait until the program execution completes ++ * Returns: 0 on success, -1 on error ++ */ ++int os_exec(const char *program, const char *arg, int wait_completion); ++ + + #ifdef OS_REJECT_C_LIB_FUNCTIONS + #define malloc OS_DO_NOT_USE_malloc +--- a/src/utils/os_unix.c ++++ b/src/utils/os_unix.c +@@ -9,6 +9,7 @@ + #include "includes.h" + + #include ++#include + + #ifdef ANDROID + #include +@@ -540,3 +541,57 @@ char * os_strdup(const char *s) + } + + #endif /* WPA_TRACE */ ++ ++ ++int os_exec(const char *program, const char *arg, int wait_completion) ++{ ++ pid_t pid; ++ int pid_status; ++ ++ pid = fork(); ++ if (pid < 0) { ++ perror("fork"); ++ 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); ++ perror("execv"); ++ 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; ++} +--- a/src/utils/os_win32.c ++++ b/src/utils/os_win32.c +@@ -244,3 +244,9 @@ size_t os_strlcpy(char *dest, const char + + return s - src - 1; + } ++ ++ ++int os_exec(const char *program, const char *arg, int wait_completion) ++{ ++ return -1; ++} -- cgit v1.1