]> diplodocus.org Git - nmh/blobdiff - uip/mhical.c
mts/smtp/smtp.c: Replace int with bool.
[nmh] / uip / mhical.c
index 27f7c9f1bbefb8fc4c235d719eeefe57fcae8e7f..6cf7c0e17b14bfdf7803789011ecbd286ceaa297 100644 (file)
@@ -1,5 +1,4 @@
-/*
- * mhical.c -- operate on an iCalendar request
+/* mhical.c -- operate on an iCalendar request
  *
  * This code is Copyright (c) 2014, by the authors of nmh.
  * See the COPYRIGHT file in the root directory of the nmh
@@ -12,6 +11,7 @@
 #include <h/fmt_scan.h>
 #include "h/addrsbr.h"
 #include "h/mts.h"
+#include "h/done.h"
 #include "h/utils.h"
 #include <time.h>
 
@@ -30,7 +30,7 @@ static void convert_common (contentline *, act);
 static void dump_unfolded (FILE *, contentline *);
 static void output (FILE *, contentline *, int);
 static void display (FILE *, contentline *, char *);
-static const char *identity (const contentline *);
+static const char *identity (const contentline *) PURE;
 static char *format_params (char *, param_list *);
 static char *fold (char *, int);
 
@@ -57,6 +57,7 @@ DEFINE_SWITCH_ARRAY(MHICAL, switches);
 #undef X
 
 vevent vevents = { NULL, NULL, NULL};
+int parser_status = 0;
 
 int
 main (int argc, char *argv[]) {
@@ -76,7 +77,7 @@ main (int argc, char *argv[]) {
 
     icaldebug = 0;  /* Global provided by bison (with name-prefix "ical"). */
 
-    if (nmh_init(argv[0], 2)) { return 1; }
+    if (nmh_init(argv[0], true, false)) { return 1; }
 
     arguments = getarguments (invo_name, argc, argv, 1);
     argp = arguments;
@@ -91,7 +92,7 @@ main (int argc, char *argv[]) {
                 ambigsw (cp, switches);
                 done (1);
             case UNKWNSW:
-                adios (NULL, "-%s unknown", cp);
+                die("-%s unknown", cp);
 
             case HELPSW: {
                 char buf[128];
@@ -108,7 +109,7 @@ main (int argc, char *argv[]) {
 
             case REPLYSW:
                 if (! (cp = *argp++) || (*cp == '-' && cp[1]))
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 if (! strcasecmp (cp, "accept")) {
                     action = ACT_ACCEPT;
                 } else if (! strcasecmp (cp, "decline")) {
@@ -118,7 +119,7 @@ main (int argc, char *argv[]) {
                 } else if (! strcasecmp (cp, "delegate")) {
                     action = ACT_DELEGATE;
                 } else {
-                    adios (NULL, "Unknown action: %s", cp);
+                    die("Unknown action: %s", cp);
                 }
                 continue;
 
@@ -128,23 +129,23 @@ main (int argc, char *argv[]) {
 
             case FORMSW:
                 if (! (form = *argp++) || *form == '-')
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 format = NULL;
                 continue;
             case FMTSW:
                 if (! (format = *argp++) || *format == '-')
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 form = NULL;
                 continue;
 
             case INFILESW:
                 if (! (cp = *argp++) || (*cp == '-' && cp[1]))
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 infile = *cp == '-'  ?  mh_xstrdup(cp)  :  path (cp, TFILE);
                 continue;
             case OUTFILESW:
                 if (! (cp = *argp++) || (*cp == '-' && cp[1]))
-                    adios (NULL, "missing argument to %s", argp[-2]);
+                    die("missing argument to %s", argp[-2]);
                 outfile = *cp == '-'  ?  mh_xstrdup(cp)  :  path (cp, TFILE);
                 continue;
 
@@ -237,7 +238,7 @@ main (int argc, char *argv[]) {
         free (outfile);
     }
 
-    return 0;
+    return parser_status;
 }
 
 /*
@@ -399,13 +400,14 @@ convert_common (contentline *clines, act action) {
 
     if ((node = find_contentline (clines, "VERSION", 0))) {
         if (! node->value) {
-            admonish (NULL, "Version property is missing value, assume 2.0");
+            inform("Version property is missing value, assume 2.0, continuing...");
             node->value = mh_xstrdup ("2.0");
         }
 
         if (strcmp (node->value, "2.0")) {
-            admonish (NULL, "supports the Version 2.0 specified by RFC 5545 "
-                            "but iCalendar object has Version %s", node->value);
+            inform("supports the Version 2.0 specified by RFC 5545 "
+               "but iCalendar object has Version %s, continuing...",
+               node->value);
             node->value = mh_xstrdup ("2.0");
         }
     }
@@ -424,7 +426,7 @@ convert_common (contentline *clines, act action) {
             insert = "Tentative: ";
             break;
         case ACT_DELEGATE:
-            adios (NULL, "Delegate replies are not supported");
+            die("Delegate replies are not supported");
             break;
         case ACT_CANCEL:
             insert = "Cancelled:";
@@ -443,7 +445,7 @@ convert_common (contentline *clines, act action) {
             node->value = tmp;
         } else {
             /* Should never get here. */
-            adios (NULL, "Unknown action: %d", action);
+            die("Unknown action: %d", action);
         }
     }
 
@@ -460,10 +462,10 @@ convert_common (contentline *clines, act action) {
                 free (node->value);
                 node->value = mh_xstrdup (buf);
             } else {
-                admonish (NULL, "strftime unable to format current time");
+                inform("strftime unable to format current time, continuing...");
             }
         } else {
-            admonish (NULL, "gmtime_r failed on current time");
+            inform("gmtime_r failed on current time, continuing...");
         }
     }
 
@@ -534,11 +536,10 @@ output (FILE *file, contentline *clines, int contenttype) {
             line = fold (add (node->value, line),
                          clines->cr_before_lf == CR_BEFORE_LF);
 
-            if (clines->cr_before_lf == LF_ONLY) {
-                fprintf (file, "%s\n", line);
-            } else {
-                fprintf (file, "%s\r\n", line);
-            }
+            fputs(line, file);
+            if (clines->cr_before_lf != LF_ONLY)
+                putc('\r', file);
+            putc('\n', file);
             free (line);
         }
     }
@@ -713,7 +714,7 @@ display (FILE *file, contentline *clines, char *nfs) {
     }
 
     /* Don't call on the END:VCALENDAR line. */
-    if (clines->next) {
+    if (clines  &&  clines->next) {
       (void) fmt_scan (fmt, buffer, INT_MAX, dat, NULL);
       fputs (charstring_buffer (buffer), file);
       fmt_free (fmt, 1);
@@ -809,7 +810,7 @@ fold (char *line, int uses_cr) {
 #endif
 
         charstring_push_back_chars (folded_line, cp, char_len, 1);
-        remaining -= char_len > 0 ? char_len : 1;
+        remaining -= max(char_len, 1);
 
         /* remaining must be > 0 to pass the loop condition above, so
            if it's not > 1, it is == 1. */
@@ -824,7 +825,7 @@ fold (char *line, int uses_cr) {
             }
         }
 
-        cp += char_len > 0 ? char_len : 1;
+        cp += max(char_len, 1);
     }
 
     free (line);