]> diplodocus.org Git - nmh/blobdiff - uip/mhstoresbr.c
Add basic support for the STLS command in POP
[nmh] / uip / mhstoresbr.c
index 7d74f1ea36d11b2f7463278c507e93df755d34e5..d9091a88fe08613b9b3746af422c78598ab5810f 100644 (file)
@@ -5,15 +5,32 @@
  * complete copyright information.
  */
 
-#include <h/mh.h>
+#include "h/mh.h"
+#include "sbr/read_switch_multiword.h"
+#include "sbr/concat.h"
+#include "sbr/smatch.h"
+#include "sbr/r1bindex.h"
+#include "sbr/uprf.h"
+#include "sbr/getcpy.h"
+#include "sbr/getfolder.h"
+#include "sbr/folder_read.h"
+#include "sbr/folder_free.h"
+#include "sbr/folder_addmsg.h"
+#include "sbr/context_find.h"
+#include "sbr/path.h"
+#include "sbr/error.h"
 #include <fcntl.h>
-#include <h/md5.h>
-#include <h/mts.h>
-#include <h/tws.h>
-#include <h/mime.h>
-#include <h/mhparse.h>
-#include <h/utils.h>
-#include "../sbr/m_mktemp.h"
+#include "h/md5.h"
+#include "h/mts.h"
+#include "h/tws.h"
+#include "h/fmt_scan.h"
+#include "h/mime.h"
+#include "h/mhparse.h"
+#include "h/utils.h"
+#include "mhmisc.h"
+#include "mhshowsbr.h"
+#include "sbr/m_maildir.h"
+#include "sbr/m_mktemp.h"
 
 enum clobber_policy_t {
   NMH_CLOBBER_ALWAYS = 0,
@@ -23,7 +40,7 @@ enum clobber_policy_t {
   NMH_CLOBBER_NEVER
 };
 
-static enum clobber_policy_t clobber_policy (const char *);
+static enum clobber_policy_t clobber_policy (const char *) PURE;
 
 struct mhstoreinfo {
     CT *cts;                 /* Top-level list of contents to store. */
@@ -42,7 +59,8 @@ struct mhstoreinfo {
 static bool use_param_as_filename(const char *p);
 
 mhstoreinfo_t
-mhstoreinfo_create (CT *ct, char *pwd, const char *csw, int asw, int vsw) {
+mhstoreinfo_create (CT *ct, char *pwd, const char *csw, int asw, int vsw)
+{
     mhstoreinfo_t info;
 
     NEW(info);
@@ -58,14 +76,16 @@ mhstoreinfo_create (CT *ct, char *pwd, const char *csw, int asw, int vsw) {
 }
 
 void
-mhstoreinfo_free (mhstoreinfo_t info) {
+mhstoreinfo_free (mhstoreinfo_t info)
+{
     free (info->cwd);
     free (info->dir);
     free (info);
 }
 
 int
-mhstoreinfo_files_not_clobbered (const mhstoreinfo_t info) {
+mhstoreinfo_files_not_clobbered (const mhstoreinfo_t info)
+{
     return info->files_not_clobbered;
 }
 
@@ -77,11 +97,6 @@ mhstoreinfo_files_not_clobbered (const mhstoreinfo_t info) {
 typedef int (*qsort_comp) (const void *, const void *);
 
 
-/* mhmisc.c */
-int part_ok (CT);
-int type_ok (CT, int);
-void flush_errors (void);
-
 /*
  * static prototypes
  */
@@ -229,12 +244,14 @@ store_application (CT ct, mhstoreinfo_t info)
      * attribute/value pairs which specify if this a tar file.
      */
     if (!ct->c_storeproc && ct->c_subtype == APPLICATION_OCTETS) {
-       int tarP = 0, zP = 0, gzP = 0;
+       bool tarP = false;
+        bool zP = false;
+        bool gzP = false;
        char *cp;
 
        if ((cp = get_param(ci->ci_first_pm, "type", ' ', 1))) {
            if (strcasecmp (cp, "tar") == 0)
-               tarP = 1;
+               tarP = true;
        }
 
        /* check for "conversions=compress" attribute */
@@ -242,11 +259,11 @@ store_application (CT ct, mhstoreinfo_t info)
            (cp = get_param(ci->ci_first_pm, "x-conversions", ' ', 1))) {
            if (strcasecmp (cp, "compress") == 0 ||
                    strcasecmp (cp, "x-compress") == 0) {
-               zP = 1;
+               zP = true;
            }
            if (strcasecmp (cp, "gzip") == 0 ||
                    strcasecmp (cp, "x-gzip") == 0) {
-               gzP = 1;
+               gzP = true;
            }
        }
 
@@ -359,7 +376,7 @@ store_partial (CT ct, mhstoreinfo_t info)
     *ctq = NULL;
 
     if (i > 1)
-       qsort ((char *) base, i, sizeof(*base), (qsort_comp) ct_compar);
+       qsort(base, i, sizeof(*base), (qsort_comp) ct_compar);
 
     cur = 1;
     for (ctq = base; *ctq; ctq++) {
@@ -471,7 +488,7 @@ ct_compar (CT *a, CT *b)
     struct partial *am = (struct partial *) ((*a)->c_ctparams);
     struct partial *bm = (struct partial *) ((*b)->c_ctparams);
 
-    return (am->pm_marked - bm->pm_marked);
+    return am->pm_marked - bm->pm_marked;
 }
 
 
@@ -489,9 +506,11 @@ ct_compar (CT *a, CT *b)
 static int
 store_content (CT ct, CT p, mhstoreinfo_t info)
 {
-    int appending = 0, msgnum = 0;
-    int is_partial = 0, first_partial = 0;
-    int last_partial = 0;
+    bool appending = false;
+    int msgnum = 0;
+    bool is_partial = false;
+    bool first_partial = false;
+    bool last_partial = false;
     char *cp, buffer[BUFSIZ];
 
     /*
@@ -511,13 +530,13 @@ store_content (CT ct, CT p, mhstoreinfo_t info)
        struct partial *pm = (struct partial *) ct->c_ctparams;
 
        /* Yep, it's a message/partial */
-       is_partial = 1;
+       is_partial = true;
 
        /* But is it the first and/or last in the collection? */
        if (pm->pm_partno == 1)
-           first_partial = 1;
+           first_partial = true;
        if (pm->pm_maxno && pm->pm_partno == pm->pm_maxno)
-           last_partial = 1;
+           last_partial = true;
 
        /*
         * If "p" is a valid pointer, then it points to the
@@ -526,9 +545,9 @@ store_content (CT ct, CT p, mhstoreinfo_t info)
         * from the previous iteration of this function.
         */
        if (p) {
-           appending = 1;
+           appending = true;
             if (! ct->c_storage) {
-               ct->c_storage = add (p->c_storage, NULL);
+               ct->c_storage = mh_xstrdup(FENDNULL(p->c_storage));
 
                /* record the folder name */
                if (p->c_folder) {
@@ -567,7 +586,7 @@ store_content (CT ct, CT p, mhstoreinfo_t info)
 
            /* Store content in temporary file for now */
            if ((tmpfilenam = m_mktemp(invo_name, NULL, NULL)) == NULL) {
-               adios(NULL, "unable to create temporary file in %s",
+               die("unable to create temporary file in %s",
                      get_temp_dir());
            }
            ct->c_storage = mh_xstrdup(tmpfilenam);
@@ -783,7 +802,7 @@ losing:
 
        fclose (fp);
 
-       return (cc != NOTOK ? OK : NOTOK);
+        return cc == NOTOK ? NOTOK : OK;
     }
 
     if (!ct->c_fp && (ct->c_fp = fopen (ct->c_file, "r")) == NULL) {
@@ -899,13 +918,12 @@ output_content_folder (char *folder, char *filename)
     struct msgs *mp;
 
     /* Read the folder. */
-    if ((mp = folder_read (folder, 0))) {
-       /* Link file into folder */
-       msgnum = folder_addmsg (&mp, filename, 0, 0, 0, 0, NULL);
-    } else {
+    if (!(mp = folder_read(folder, 0))) {
        inform("unable to read folder %s", folder);
        return NOTOK;
     }
+    /* Link file into folder */
+    msgnum = folder_addmsg(&mp, filename, 0, 0, 0, 0, NULL);
 
     /* free folder structure */
     folder_free (mp);
@@ -1072,7 +1090,7 @@ get_storeproc (CT ct)
                free(cp);
                return;
        }
-        mh_xfree(cp);
+        free(cp);
     }
 
     /*
@@ -1086,7 +1104,7 @@ get_storeproc (CT ct)
            ct->c_storeproc = mh_xstrdup(cp);
 
     }
-    mh_xfree(cp);
+    free(cp);
 }
 
 
@@ -1122,9 +1140,9 @@ copy_some_headers (FILE *out, CT ct)
 /******************************************************************************/
 /* -clobber support */
 
-static
-enum clobber_policy_t
-clobber_policy (const char *value) {
+static enum clobber_policy_t
+clobber_policy (const char *value)
+{
   if (value == NULL  ||  ! strcasecmp (value, "always")) {
     return NMH_CLOBBER_ALWAYS;
   }
@@ -1141,12 +1159,13 @@ clobber_policy (const char *value) {
     return NMH_CLOBBER_NEVER;
   }
 
-  adios (NULL, "invalid argument, %s, to clobber", value);
+  die("invalid argument, %s, to clobber", value);
 }
 
 
 static char *
-next_version (char *file, enum clobber_policy_t clobber_policy) {
+next_version (char *file, enum clobber_policy_t clobber_policy)
+{
   const size_t max_versions = 1000000;
   /* 8 = log max_versions  +  one for - or .  +  one for null terminator */
   const size_t buflen = strlen (file) + 8;
@@ -1207,7 +1226,8 @@ next_version (char *file, enum clobber_policy_t clobber_policy) {
 
 
 static char *
-clobber_check (char *original_file, mhstoreinfo_t info) {
+clobber_check (char *original_file, mhstoreinfo_t info)
+{
   /* clobber policy        return value
    * --------------        ------------
    *   -always             original_file
@@ -1219,7 +1239,7 @@ clobber_check (char *original_file, mhstoreinfo_t info) {
 
   char *file;
   char *cwd = NULL;
-  int check_again;
+  bool check_again;
 
   if (! strcmp (original_file, "-")) {
       return original_file;
@@ -1246,7 +1266,7 @@ clobber_check (char *original_file, mhstoreinfo_t info) {
     struct stat st;
 
     file = original_file;
-    check_again = 0;
+    check_again = false;
 
     switch (info->clobber_policy) {
       case NMH_CLOBBER_ALWAYS:
@@ -1293,7 +1313,7 @@ clobber_check (char *original_file, mhstoreinfo_t info) {
               break;
             case NMH_RENAME: {
               char buf[PATH_MAX];
-              printf ("Enter filename or full path of the new file: ");
+              fputs("Enter filename or full path of the new file: ", stdout);
               if (fgets (buf, sizeof buf, stdin) == NULL  ||
                   buf[0] == '\0') {
                 file = NULL;
@@ -1312,7 +1332,7 @@ clobber_check (char *original_file, mhstoreinfo_t info) {
                 file = cwd  ?  concat (cwd, "/", buf, NULL)  :  mh_xstrdup(buf);
               }
 
-              check_again = 1;
+              check_again = true;
               break;
             }
           }
@@ -1339,7 +1359,8 @@ clobber_check (char *original_file, mhstoreinfo_t info) {
   return file;
 }
 
-static bool use_param_as_filename(const char *p)
+static bool
+use_param_as_filename(const char *p)
 {
     /* Preserve result of original test that considered an empty string
      * OK. */