+ }
+
+ /* Restore signals */
+ result = sigprocmask(SIG_BLOCK, &orig_sigs, NULL);
+ if(result == -1) {
+ PERROR("sigprocmask");
+ return -1;
+ }
+
+ 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);