diff options
Diffstat (limited to 'src/util/u_process.c')
-rw-r--r-- | src/util/u_process.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/util/u_process.c b/src/util/u_process.c index b9328d58da4..686e4624429 100644 --- a/src/util/u_process.c +++ b/src/util/u_process.c @@ -26,12 +26,19 @@ */ #include "u_process.h" +#include "detect_os.h" +#include "macros.h" #include <string.h> #include <errno.h> #include <stdlib.h> +#include <unistd.h> #undef GET_PROGRAM_NAME +#if DETECT_OS_WINDOWS +#include <windows.h> +#endif + #if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME) static char *path = NULL; @@ -152,3 +159,27 @@ util_get_process_name(void) { return GET_PROGRAM_NAME(); } + +size_t +util_get_process_exec_path(char* process_path, size_t len) +{ +#if DETECT_OS_WINDOWS + return GetModuleFileNameA(NULL, process_path, len); +#elif DETECT_OS_UNIX + ssize_t r; + + if ((r = readlink("/proc/self/exe", process_path, len)) > 0) + goto success; + if ((r = readlink("/proc/curproc/exe", process_path, len)) > 0) + goto success; + if ((r = readlink("/proc/curproc/file", process_path, len)) > 0) + goto success; + + return 0; +success: + process_path[r] = '\0'; + return r; + +#endif + return 0; +} |