+ GT_("Message termination or close of BSMTP file failed: %s\n"), strerror(oerrno));
+ return(FALSE);
+ }
+ } else if (ctl->mda) {
+ int rc = 0, e = 0, e2 = 0, err = 0;
+
+ /* close the delivery pipe, we'll reopen before next message */
+ if (sinkfp)
+ {
+ if (ferror(sinkfp))
+ err = 1, e2 = errno;
+ if ((fflush(sinkfp)))
+ err = 1, e2 = errno;
+
+ errno = 0;
+ rc = pclose(sinkfp);
+ e = errno;
+ sinkfp = (FILE *)NULL;
+ }
+
+ deal_with_sigchld(); /* Restore SIGCHLD handling to reap zombies */
+
+ if (rc || err)
+ {
+ if (err) {
+ report(stderr, GT_("Error writing to MDA: %s\n"), strerror(e2));
+ } else if (WIFSIGNALED(rc)) {
+ report(stderr,
+ GT_("MDA died of signal %d\n"), WTERMSIG(rc));
+ } else if (WIFEXITED(rc)) {
+ report(stderr,
+ GT_("MDA returned nonzero status %d\n"), WEXITSTATUS(rc));
+ } else {
+ report(stderr,
+ GT_("Strange: MDA pclose returned %d and errno %d/%s, cannot handle at %s:%d\n"),
+ rc, e, strerror(e), __FILE__, __LINE__);
+ }
+