-void err(s) char *s; { substdio_putsflush(subfderr,s); }
-void soft() { _exit(111); }
-void hard() { _exit(100); }
-
-void temp_childcrashed() { err("Aack, child crashed. (#4.3.0)\n"); soft(); }
-void temp_rewind() { err("Unable to rewind message. (#4.3.0)\n"); soft(); }
-void temp_fork() { err("Unable to fork. (#4.3.0)\n"); soft(); }
-void temp_read() { err("Error while reading message. (#4.3.0)\n"); soft(); }
-void temp_write() { err("Error while writing message. (#4.3.0)\n"); soft(); }
-void temp_child() { err("Temporary error in forwarding message. (#4.3.0)\n"); soft(); }
-void temp_maildirtimeout() { err("Timeout on maildir delivery. (#4.3.0)\n"); soft(); }
-void temp_maildir() { err("Temporary error on maildir delivery. (#4.3.0)\n"); soft(); }
-void temp_nomaildir() { err("Unable to chdir to maildir. (#4.2.1)\n"); soft(); }
-void temp_open(fn) char *fn; { err("Unable to open "); err(fn); err(". (#4.2.1)\n"); soft(); }
-
-void temp_blankline() { err("Uh-oh: first line of .qmail file is blank. (#4.2.1)\n"); soft(); }
-void temp_fofile() { err("Uh-oh: .qmail has file delivery but has x bit set. (#4.7.0)\n"); soft(); }
-void temp_foprog() { err("Uh-oh: .qmail has prog delivery but has x bit set. (#4.7.0)\n"); soft(); }
-void temp_nomem() { err("Out of memory. (#4.3.0)\n"); soft(); }
-void temp_chdir() { err("Unable to switch to home directory. (#4.3.0)\n"); soft(); }
-void temp_homestat() { err("Unable to stat home directory. (#4.3.0)\n"); soft(); }
-void temp_homesticky() { err("Home directory is sticky: user is editing his .qmail file. (#4.2.1)\n"); soft(); }
-void temp_homewritable() { err("Uh-oh: home directory is writable. (#4.7.0)\n"); soft(); }
-void temp_qmwritable() { err("Uh-oh: .qmail file is writable. (#4.7.0)\n"); soft(); }
-void temp_nfsqmail() { err("Temporary error trying to open .qmail file. (#4.3.0)\n"); soft(); }
-void temp_denyqmail() { err("Permission error trying to open .qmail file. (#4.3.0)\n"); soft(); }
-void temp_slowlock() { err("File has been locked for 30 seconds straight. (#4.3.0)\n"); soft(); }
-
-void bounce_childperm() { err("Permanent error in forwarding message. (#5.2.4)\n"); hard(); }
-void bounce_loop() { err("This message is looping: it already has my Delivered-To line. (#5.4.6)\n"); hard(); }
-void bounce_ext() { err("Sorry, no mailbox here by that name. (#5.1.1)\n"); hard(); }
-void usage() { err("qmail-local: usage: qmail-local [ -nN ] user homedir local dash ext domain sender aliasempty\n"); hard(); }
-
-void warn_homesticky() { err("Warning: home directory is sticky.\n"); }
+void usage() { strerr_die1x(100,"qmail-local: usage: qmail-local [ -nN ] user homedir local dash ext domain sender aliasempty"); }
+
+void temp_nomem() { strerr_die1x(111,"Out of memory. (#4.3.0)"); }
+void temp_rewind() { strerr_die1x(111,"Unable to rewind message. (#4.3.0)"); }
+void temp_childcrashed() { strerr_die1x(111,"Aack, child crashed. (#4.3.0)"); }
+void temp_fork() { strerr_die3x(111,"Unable to fork: ",error_str(errno),". (#4.3.0)"); }
+void temp_read() { strerr_die3x(111,"Unable to read message: ",error_str(errno),". (#4.3.0)"); }
+void temp_slowlock()
+{ strerr_die1x(111,"File has been locked for 30 seconds straight. (#4.3.0)"); }
+void temp_qmail(fn) char *fn;
+{ strerr_die5x(111,"Unable to open ",fn,": ",error_str(errno),". (#4.3.0)"); }