]> git.marmaro.de Git - mmh/commitdiff
Change link-time overriding of done() to run-time reassigning of equivalent
authorJoel Reicher <jjr@panacea.null.org>
Sun, 4 Nov 2007 04:47:17 +0000 (04:47 +0000)
committerJoel Reicher <jjr@panacea.null.org>
Sun, 4 Nov 2007 04:47:17 +0000 (04:47 +0000)
(*done)(). This should make changing the return type of done and the
rationalisation of exit code easier.

15 files changed:
h/mh.h
h/prototypes.h
sbr/done.c
uip/inc.c
uip/mhbuild.c
uip/mhlist.c
uip/mhn.c
uip/mhshow.c
uip/mhstore.c
uip/mhtest.c
uip/packf.c
uip/pick.c
uip/rcvdist.c
uip/rcvstore.c
uip/sendsbr.c

diff --git a/h/mh.h b/h/mh.h
index 130bfde5686cd907874b1b03d49d135e952fdcc8..bcfe6ae9d6ce7e770998c850a176f371af61780f 100644 (file)
--- a/h/mh.h
+++ b/h/mh.h
@@ -336,5 +336,7 @@ extern char *vmhproc;
 extern char *whatnowproc;
 extern char *whomproc;
 
+extern int (*done) (int);
+
 #include <h/prototypes.h>
 
index a91418e2c9d5cc4be33129007452b83e11ba3834..0f0502526e126eb0c8cd924e7a54ac3c202f2b13 100644 (file)
@@ -47,7 +47,7 @@ void cpydata (int, int, char *, char *);
 void cpydgst (int, int, char *, char *);
 int decode_rfc2047 (char *, char *, size_t);
 void discard (FILE *);
-int done (int);
+int default_done (int);
 int ext_hook(char *, char *, char *);
 int fdcompare (int, int);
 int folder_addmsg (struct msgs **, char *, int, int, int, int, char *);
index cf2e3080ad668a39c81b1a546536fccad72e13b4..bcc258ccf104cdc136b6ab00ec0d53113a81c61c 100644 (file)
 
 #include <h/mh.h>
 
+int (*done) (int) = default_done;
+
 int
-done (int status)
+default_done (int status)
 {
     exit (status);
     return 1;  /* dead code to satisfy the compiler */
index 45036f5baa0877b399fdcbdda930f76939e0ddc4..f2d2e77901635e0f49c4196c037cd0af301e0e41 100644 (file)
--- a/uip/inc.c
+++ b/uip/inc.c
@@ -223,8 +223,8 @@ static FILE *in;
  */
 char *map_name(char *);
 
+static int inc_done(int);
 #ifdef POP
-int done(int);
 static int pop_action(char *);
 static int pop_pack(char *);
 static int map_count(void);
@@ -263,6 +263,8 @@ main (int argc, char **argv)
     struct hes_postoffice *po;
 #endif
 
+    done=inc_done;
+
 /* absolutely the first thing we do is save our privileges,
  * and drop them if we can.
  */
@@ -987,8 +989,8 @@ cpymsg (FILE *in, FILE *out)
 #endif /* if 0 */
 
 
-int
-done (int status)
+static int
+inc_done (int status)
 {
 #ifdef POP
     if (packfile && pd != NOTOK)
index cfe776fe9c816741b37eac374bdd4539726352f0..15132eece4121407e176c0d4cbd4dbdf80050034 100644 (file)
@@ -100,6 +100,7 @@ static int unlink_infile  = 0;
 static char outfile[BUFSIZ];
 static int unlink_outfile = 0;
 
+static int unlink_done (int);
 
 /* mhbuildsbr.c */
 CT build_mime (char *);
@@ -126,6 +127,8 @@ main (int argc, char **argv)
     CT ct, cts[2];
     FILE *fp;
 
+    done=unlink_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -382,8 +385,8 @@ main (int argc, char **argv)
 }
 
 
-int
-done (int status)
+static int
+unlink_done (int status)
 {
     /*
      * Check if we need to remove stray
index 1de53e33aa29d83b541f94c95ea9f92710f0b7bb..bcc4dd2b7b83f980893d8703b1dc4ec55821d848 100644 (file)
@@ -117,6 +117,7 @@ void free_content (CT);
  * static prototypes
  */
 static RETSIGTYPE pipeser (int);
+static int freectp_done (int);
 
 
 int
@@ -131,6 +132,8 @@ main (int argc, char **argv)
     struct msgs *mp = NULL;
     CT ct, *ctp;
 
+    done=freectp_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -391,8 +394,8 @@ pipeser (int i)
 }
 
 
-int
-done (int status)
+static int
+freectp_done (int status)
 {
     CT *ctp;
 
index 809568c5c675edbc80ac0c79ef5a8f38055c5ec3..3f2d2623d2231cb2b197c4564196ec8cfa5774f6 100644 (file)
--- a/uip/mhn.c
+++ b/uip/mhn.c
@@ -205,6 +205,7 @@ void free_content (CT);
  * static prototypes
  */
 static RETSIGTYPE pipeser (int);
+static int freectp_done (int);
 
 
 int
@@ -220,6 +221,8 @@ main (int argc, char **argv)
     CT ct, *ctp;
     FILE *fp;
 
+    done=freectp_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -704,8 +707,8 @@ pipeser (int i)
 }
 
 
-int
-done (int status)
+static int
+freectp_done (int status)
 {
     CT *ctp;
 
index 3e7e3a5f24537f15c88c3a56eef5edf19c0c308d..475517172e587a5bd7d56b47f68c2d09f3d6b666 100644 (file)
@@ -133,6 +133,7 @@ void free_content (CT);
  * static prototypes
  */
 static RETSIGTYPE pipeser (int);
+static int freectp_done (int);
 
 
 int
@@ -147,6 +148,8 @@ main (int argc, char **argv)
     CT ct, *ctp;
     FILE *fp;
 
+    done=freectp_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -471,8 +474,8 @@ pipeser (int i)
 }
 
 
-int
-done (int status)
+static int
+freectp_done (int status)
 {
     CT *ctp;
 
index dc627247351f47bba65f10b2f9591b7381bf8749..b1f57fe9dc276d4b0e4c4a80c0e92f54a2ef0719 100644 (file)
@@ -111,6 +111,7 @@ void free_content (CT);
  * static prototypes
  */
 static RETSIGTYPE pipeser (int);
+static int freectp_done (int);
 
 
 int
@@ -125,6 +126,8 @@ main (int argc, char **argv)
     CT ct, *ctp;
     FILE *fp;
 
+    done=freectp_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -403,8 +406,8 @@ pipeser (int i)
 }
 
 
-int
-done (int status)
+static int
+freectp_done (int status)
 {
     CT *ctp;
 
index 5e6494a201006f6212cc86d60a8c4d1068a614a6..985147c73a24e6640b7b10595cc8bf90d194fd0a 100644 (file)
@@ -114,6 +114,7 @@ void free_content (CT);
  */
 static int write_content (CT *, char *);
 static RETSIGTYPE pipeser (int);
+static int freectp_done (int);
 
 
 int
@@ -127,6 +128,8 @@ main (int argc, char **argv)
     struct msgs *mp = NULL;
     CT ct, *ctp;
 
+    done=freectp_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -397,8 +400,8 @@ pipeser (int i)
 }
 
 
-int
-done (int status)
+static int
+freectp_done (int status)
 {
     CT *ctp;
 
index 9f9546670b1f80fa2b05698fb7f13cfdd5648cf7..0183da65355480d8428396c3c2e8962de6a9a86c 100644 (file)
@@ -33,6 +33,8 @@ static int md = NOTOK;
 static int mbx_style = MBOX_FORMAT;
 static int mapping = 0;
 
+static int mbxclose_done(int);
+
 char *file = NULL;
 
 
@@ -46,6 +48,8 @@ main (int argc, char **argv)
     struct msgs *mp;
     struct stat st;
 
+    done=mbxclose_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -178,8 +182,8 @@ main (int argc, char **argv)
     return done (0);
 }
 
-int
-done (int status)
+static int
+mbxclose_done (int status)
 {
     mbx_close (file, md);
     exit (status);
index dff628aec85ffde37f58a83953d278a567fbcd52..afbcf88cabc79009b8b0be5ae598b7851942e6a9 100644 (file)
@@ -68,6 +68,7 @@ static struct swit switches[] = {
 
 static int listsw = -1;
 
+static int putzero_done (int);
 
 int
 main (int argc, char **argv)
@@ -81,6 +82,8 @@ main (int argc, char **argv)
     struct msgs *mp;
     register FILE *fp;
 
+    done=putzero_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -287,8 +290,8 @@ main (int argc, char **argv)
 }
 
 
-int
-done (int status)
+static int
+putzero_done (int status)
 {
     if (listsw && status && !isatty (fileno (stdout)))
        printf ("0\n");
index e8815653e7713170d3d4a1c15dd3c22dfad8076d..1667232c8a22436dcb9233a69f37a5ef1deda092 100644 (file)
@@ -34,7 +34,7 @@ static char tmpfil[BUFSIZ] = "";
  * prototypes
  */
 static void rcvdistout (FILE *, char *, char *);
-int done (int);
+static int unlink_done (int);
 
 
 int
@@ -46,6 +46,8 @@ main (int argc, char **argv)
     char **argp, **arguments, *vec[MAXARGS];
     register FILE *fp;
 
+    done=unlink_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -268,8 +270,8 @@ finished: ;
 }
 
 
-int
-done (int status)
+static int
+unlink_done (int status)
 {
     if (backup[0])
        unlink (backup);
index 4e14afbbd01e490278dd0316a83f5dd0fb82ca2d..3e0961e51a1ddc6ddd6905a856b956dc7dfdb55e 100644 (file)
@@ -48,6 +48,7 @@ static struct swit switches[] = {
  */
 static char *tmpfilenam = NULL;
 
+static int unlink_done(int);
 
 int
 main (int argc, char **argv)
@@ -60,6 +61,8 @@ main (int argc, char **argv)
     struct msgs *mp;
     struct stat st;
 
+    done=unlink_done;
+
 #ifdef LOCALE
     setlocale(LC_ALL, "");
 #endif
@@ -228,8 +231,8 @@ main (int argc, char **argv)
 /*
  * Clean up and exit
  */
-int
-done(int status)
+static int
+unlink_done(int status)
 {
     if (tmpfilenam && *tmpfilenam)
        unlink (tmpfilenam);
index aeba011e1377352e48db87e90cd7ea3d862b7ba0..cb6bb3f784b1b24512a89537f8daa43df060e909 100644 (file)
@@ -41,7 +41,6 @@ char *altmsg   = NULL;                /*  .. */
 char *annotext = NULL;
 char *distfile = NULL;
 
-static int armed = 0;
 static jmp_buf env;
 
 static char    body_file_name[MAXPATHLEN + 1];         /* name of temporary file for body content */
@@ -56,12 +55,12 @@ static      FILE    *composition_file;                      /* composition file pointer */
  * external prototypes
  */
 int sendsbr (char **, int, char *, struct stat *, int, char *, int);
-int done (int);
 char *getusername (void);
 
 /*
  * static prototypes
  */
+static int armed_done (int);
 static void alert (char *, int);
 static int tmp_fd (void);
 static void anno (int, struct stat *);
@@ -118,7 +117,7 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, int rename_drft, cha
        }
     }
 
-    armed++;
+    done=armed_done;
     switch (setjmp (env)) {
     case OK: 
        /*
@@ -154,7 +153,7 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, int rename_drft, cha
        break;
     }
 
-    armed = 0;
+    done=default_done;
     if (distfile)
        unlink (distfile);
 
@@ -1075,11 +1074,10 @@ oops:
 }
 
 
-int
-done (int status)
+static int
+armed_done (int status)
 {
-    if (armed)
-       longjmp (env, status ? status : NOTOK);
+    longjmp (env, status ? status : NOTOK);
 
     exit (status);
     return 1;  /* dead code to satisfy the compiler */