]> diplodocus.org Git - nmh/blobdiff - uip/slocal.c
Add basic support for the STLS command in POP
[nmh] / uip / slocal.c
index dae9ca95c1e6ef6ab7bdce22131e48722b5b386a..5eb5243c970c14373885faffd4f02bc45ef2177a 100644 (file)
  * Ruud de Rooij <ruud@ruud.org>  Sun, 28 May 2000 17:28:55 +0200
  */
 
-#include <h/mh.h>
-#include <h/dropsbr.h>
-#include <h/rcvmail.h>
-#include <h/signals.h>
+#include "h/mh.h"
+#include "sbr/dtime.h"
+#include "sbr/m_gmprot.h"
+#include "sbr/m_getfld.h"
+#include "sbr/getarguments.h"
+#include "sbr/smatch.h"
+#include "sbr/strindex.h"
+#include "sbr/closefds.h"
+#include "sbr/trimcpy.h"
+#include "sbr/getcpy.h"
+#include "sbr/ambigsw.h"
+#include "sbr/pidstatus.h"
+#include "sbr/print_version.h"
+#include "sbr/print_help.h"
+#include "sbr/error.h"
+#include "h/dropsbr.h"
+#include "h/signals.h"
 #include <setjmp.h>
-#include <h/tws.h>
-#include <h/mts.h>
+#include "h/tws.h"
+#include "h/mts.h"
 #include "h/done.h"
-#include <h/utils.h>
+#include "h/utils.h"
 #include "sbr/lock_file.h"
 #include "sbr/m_mktemp.h"
 
@@ -83,10 +96,10 @@ DEFINE_SWITCH_ARRAY(SLOCAL, switches);
 static int globbed = 0;                /* have we built "vars" table yet?        */
 static int parsed = 0;         /* have we built header field table yet   */
 static int utmped = 0;         /* have we scanned umtp(x) file yet       */
-static int suppressdup = 0;    /* are we suppressing duplicate messages? */
+static bool suppressdup;       /* are we suppressing duplicate messages? */
 
-static int verbose = 0;
-static int debug = 0;
+static bool verbose;
+static bool debug;
 
 static char *addr = NULL;
 static char *user = NULL;
@@ -189,7 +202,7 @@ main (int argc, char **argv)
     char mailbox[BUFSIZ], tmpfil[BUFSIZ];
     char **argp, **arguments;
 
-    if (nmh_init(argv[0], 0 /* use context_foil() */)) { return 1; }
+    if (nmh_init(argv[0], false, false)) { return 1; }
 
     mts_init ();
     arguments = getarguments (invo_name, argc, argv, 0);
@@ -203,7 +216,7 @@ main (int argc, char **argv)
                    ambigsw (cp, switches);
                    done (1);
                case UNKWNSW: 
-                   adios (NULL, "-%s unknown", cp);
+                   die("-%s unknown", cp);
 
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [switches]", invo_name);
@@ -215,60 +228,60 @@ main (int argc, char **argv)
 
                case ADDRSW: 
                    if (!(addr = *argp++))/* allow -xyz arguments */
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case INFOSW: 
                    if (!(info = *argp++))/* allow -xyz arguments */
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case USERSW: 
                    if (!(user = *argp++))/* allow -xyz arguments */
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case FILESW: 
                    if (!(file = *argp++) || *file == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case SENDERSW: 
                    if (!(sender = *argp++))/* allow -xyz arguments */
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case MAILBOXSW: 
                    if (!(mbox = *argp++) || *mbox == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
                case HOMESW: 
                    if (!(home = *argp++) || *home == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    continue;
 
                case MAILSW: 
                    if (!(cp = *argp++) || *cp == '-')
-                       adios (NULL, "missing argument to %s", argp[-2]);
+                       die("missing argument to %s", argp[-2]);
                    if (mdlvr)
-                       adios (NULL, "only one maildelivery file at a time!");
+                       die("only one maildelivery file at a time!");
                    mdlvr = cp;
                    continue;
 
                case VERBSW: 
-                   verbose++;
+                   verbose = true;
                    continue;
                case NVERBSW: 
-                   verbose = 0;
+                   verbose = false;
                    continue;
 
                case SUPPRESSDUP:
-                   suppressdup++;
+                   suppressdup = true;
                    continue;
                case NSUPPRESSDUP:
-                   suppressdup = 0;
+                   suppressdup = false;
                    continue;
                case DEBUGSW: 
-                   debug++;
+                   debug = true;
                    continue;
            }
        } else {
-               adios (NULL, "only switch arguments are supported");
+               die("only switch arguments are supported");
        }
     }
 
@@ -278,7 +291,7 @@ main (int argc, char **argv)
        user = getusername ();
     }
     if ((pw = getpwnam (user)) == NULL)
-       adios (NULL, "no such local user as %s", user);
+       die("no such local user as %s", user);
 
     if (chdir (pw->pw_dir) == -1)
        if (chdir ("/") < 0) {
@@ -303,7 +316,7 @@ main (int argc, char **argv)
 
     /* Record the delivery time */
     if ((now = dlocaltimenow ()) == NULL)
-       adios (NULL, "unable to ascertain local time");
+       die("unable to ascertain local time");
     snprintf (ddate, sizeof(ddate), "Delivery-Date: %s\n", dtimenow (0));
 
     /*
@@ -318,7 +331,7 @@ main (int argc, char **argv)
        if (debug)
            debug_printf ("retrieving message from file \"%s\"\n", file);
        if ((fd = copy_message (tempfd, tmpfil, 1)) == -1)
-           adios(NULL, "unable to create temporary file in %s",
+           die("unable to create temporary file in %s",
                   get_temp_dir());
        close (tempfd);
     } else {
@@ -326,7 +339,7 @@ main (int argc, char **argv)
        if (debug)
            debug_printf ("retrieving message from stdin\n");
        if ((fd = copy_message (fileno (stdin), tmpfil, 1)) == -1)
-           adios(NULL, "unable to create temporary file in %s",
+           die("unable to create temporary file in %s",
                   get_temp_dir());
     }
 
@@ -347,7 +360,7 @@ main (int argc, char **argv)
     (void) m_unlink (tmpfil);
 
     if (!(fp = fdopen (fd, "r+")))
-       adios (NULL, "unable to access temporary file");
+       die("unable to access temporary file");
 
     /*
      * If no sender given, extract it
@@ -379,7 +392,7 @@ main (int argc, char **argv)
     /* deliver the message */
     status = localmail (fd, mdlvr);
 
-    done (status != -1 ? RCV_MOK : RCV_MBX);
+    done(status != -1 ? 0 : 1);
     return 1;
 }
 
@@ -421,7 +434,12 @@ localmail (int fd, char *mdlvr)
 static int
 usr_delivery (int fd, char *delivery, int su)
 {
-    int i, accept, status=1, won, vecp, next;
+    int i;
+    bool accept;
+    int status=1;
+    bool won;
+    int vecp;
+    bool next;
     char *field, *pattern, *action, *result, *string;
     char buffer[BUFSIZ], tmpbuf[BUFSIZ];
     char *vec[NVEC];
@@ -444,8 +462,8 @@ usr_delivery (int fd, char *delivery, int su)
        return -1;
     }
 
-    won = 0;
-    next = 1;
+    won = false;
+    next = true;
 
     /* read and process delivery file */
     while (fgets (buffer, sizeof(buffer), fp)) {
@@ -503,7 +521,7 @@ usr_delivery (int fd, char *delivery, int su)
                 * Take action, and consider delivered if
                 * action is successful.
                 */
-               accept = 1;
+               accept = true;
                break;
 
            case 'R': 
@@ -513,7 +531,7 @@ usr_delivery (int fd, char *delivery, int su)
                 * Take action, but don't consider delivered, even
                 * if action is successful
                 */
-               accept = 0;
+               accept = false;
                break;
        }
 
@@ -556,9 +574,9 @@ usr_delivery (int fd, char *delivery, int su)
                 */
                if ((p = lookup (hdrs, field)) && (p->p_value != NULL)
                        && matches (p->p_value, pattern)) {
-                   next = 1;
+                   next = true;
                } else {
-                   next = 0;
+                   next = false;
                    continue;
                }
                break;
@@ -630,10 +648,10 @@ usr_delivery (int fd, char *delivery, int su)
                break;
        }
 
-       if (status) next = 0;   /* action failed, mark for 'N' result */
+       if (status) next = false; /* action failed, mark for 'N' result */
 
        if (accept && status == 0)
-           won++;
+           won = true;
     }
 
     fclose (fp);
@@ -1354,7 +1372,7 @@ adorn (char *what, char *fmt, ...)
     char *s;
 
     eindex = errno;    /* save the errno */
-    printf(", ");
+    fputs(", ", stdout);
 
     va_start(ap, fmt);
     vprintf(fmt, ap);