+ /* Unset environment */
+
+ for(int i = 0; envp[i]; i++) {
+ char *e = strchr(envp[i], '=');
+ if(e) {
+ char p[e - envp[i] + 1];
+ strncpy(p, envp[i], e - envp[i]);
+ p[e - envp[i]] = '\0';
+ putenv(p);
+ }
+ }
+
+#ifdef WEXITSTATUS
+ if(status != -1) {
+ if(WIFEXITED(status)) { /* Child exited by itself */
+ if(WEXITSTATUS(status)) {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Script %s exited with non-zero status %d",
+ name, WEXITSTATUS(status));
+ return false;
+ }
+ } else if(WIFSIGNALED(status)) { /* Child was killed by a signal */
+ logger(DEBUG_ALWAYS, LOG_ERR, "Script %s was killed by signal %d (%s)",
+ name, WTERMSIG(status), strsignal(WTERMSIG(status)));
+ return false;
+ } else { /* Something strange happened */
+ logger(DEBUG_ALWAYS, LOG_ERR, "Script %s terminated abnormally", name);
+ return false;
+ }
+ } else {
+ logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "system", strerror(errno));
+ return false;
+ }
+#endif
+#endif
+ return true;