From: Pierre-Marc Fournier Date: Fri, 25 Sep 2009 16:03:06 +0000 (-0400) Subject: libinterfork: add and execve override X-Git-Tag: v0.1~129 X-Git-Url: http://git.lttng.org/?p=ust.git;a=commitdiff_plain;h=97b042a3085a90b776471390a79a4e9dc02b75e9 libinterfork: add and execve override --- diff --git a/libinterfork/interfork.c b/libinterfork/interfork.c index 81f896e..cfdd2c4 100644 --- a/libinterfork/interfork.c +++ b/libinterfork/interfork.c @@ -22,6 +22,7 @@ #include "share/usterr.h" extern void ust_fork(void); +extern void ust_potential_exec(void); pid_t fork(void) { @@ -44,3 +45,24 @@ pid_t fork(void) return retval; } + +int execve(const char *filename, char *const argv[], char *const envp[]) +{ + static int (*plibc_func)(const char *filename, char *const argv[], char *const envp[]) = NULL; + + pid_t retval; + + if(plibc_func == NULL) { + plibc_func = dlsym(RTLD_NEXT, "execve"); + if(plibc_func == NULL) { + fprintf(stderr, "libcwrap: unable to find execve\n"); + return -1; + } + } + + ust_potential_exec(); + + retval = plibc_func(filename, argv, envp); + + return retval; +}