]> diplodocus.org Git - nmh/blobdiff - uip/mhlsbr.c
lock_file.c: close(2) file descriptor on failure, avoiding leak.
[nmh] / uip / mhlsbr.c
index e16f31d9daaeb5306921c9e35c8930fa4ba13125..df0e24bf101ebf63a44cd49767acebf3a2e55135 100644 (file)
 #include <h/fmt_scan.h>
 #include <h/tws.h>
 #include <h/utils.h>
 #include <h/fmt_scan.h>
 #include <h/tws.h>
 #include <h/utils.h>
-#include "../sbr/m_popen.h"
+#include "sbr/m_popen.h"
 #include <setjmp.h>
 #include <sys/types.h>
 #include <setjmp.h>
 #include <sys/types.h>
+#include "sbr/terminal.h"
 
 /*
  * MAJOR BUG:
 
 /*
  * MAJOR BUG:
@@ -315,7 +316,7 @@ static int ptos (char *, char **);
 static char *parse (void);
 static void process (char *, char *, int, int);
 static void mhlfile (FILE *, char *, int, int);
 static char *parse (void);
 static void process (char *, char *, int, int);
 static void mhlfile (FILE *, char *, int, int);
-static int mcomp_flags (char *);
+static int mcomp_flags (char *) PURE;
 static char *mcomp_add (unsigned long, char *, char *);
 static void mcomp_format (struct mcomp *, struct mcomp *);
 static struct mcomp *add_queue (struct mcomp **, struct mcomp **, char *, char *, int);
 static char *mcomp_add (unsigned long, char *, char *);
 static void mcomp_format (struct mcomp *, struct mcomp *);
 static struct mcomp *add_queue (struct mcomp **, struct mcomp **, char *, char *, int);
@@ -327,8 +328,8 @@ static void putch (char, unsigned long);
 static void intrser (int);
 static void pipeser (int);
 static void quitser (int);
 static void intrser (int);
 static void pipeser (int);
 static void quitser (int);
-static void mhladios (char *, char *, ...);
-static void mhldone (int);
+static void mhladios (char *, char *, ...) CHECK_PRINTF(2, 3) NORETURN;
+static void mhldone (int) NORETURN;
 static void filterbody (struct mcomp *, char *, int, int,
                         m_getfld_state_t);
 static void compile_formatfield(struct mcomp *);
 static void filterbody (struct mcomp *, char *, int, int,
                         m_getfld_state_t);
 static void compile_formatfield(struct mcomp *);
@@ -360,20 +361,16 @@ mhl (int argc, char **argv)
                case AMBIGSW: 
                    ambigsw (cp, mhlswitches);
                    mhldone (1);
                case AMBIGSW: 
                    ambigsw (cp, mhlswitches);
                    mhldone (1);
-                   /* FALLTHRU */
                case UNKWNSW: 
                    mhladios (NULL, "-%s unknown\n", cp);
                case UNKWNSW: 
                    mhladios (NULL, "-%s unknown\n", cp);
-                   /* FALLTHRU */
 
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [switches] [files ...]", invo_name);
                    print_help (buf, mhlswitches, 1);
                    mhldone (0);
 
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [switches] [files ...]", invo_name);
                    print_help (buf, mhlswitches, 1);
                    mhldone (0);
-                   /* FALLTHRU */
                case VERSIONSW:
                    print_version(invo_name);
                    mhldone (0);
                case VERSIONSW:
                    print_version(invo_name);
                    mhldone (0);
-                   /* FALLTHRU */
 
                case BELLSW: 
                    bellflg = 1;
 
                case BELLSW: 
                    bellflg = 1;
@@ -401,8 +398,7 @@ mhl (int argc, char **argv)
                case SLEEPSW:
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
                case SLEEPSW:
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
-                   else
-                       sleepsw = atoi (cp);/* ZERO ok! */
+                    sleepsw = atoi (cp);/* ZERO ok! */
                    continue;
 
                case PROGSW:
                    continue;
 
                case PROGSW:
@@ -424,13 +420,13 @@ mhl (int argc, char **argv)
                case LENSW: 
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
                case LENSW: 
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
-                   else if ((length = atoi (cp)) < 1)
+                   if ((length = atoi (cp)) < 1)
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
                case WIDTHSW: 
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
                case WIDTHSW: 
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
-                   else if ((width = atoi (cp)) < 1)
+                   if ((width = atoi (cp)) < 1)
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
 
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
 
@@ -441,13 +437,13 @@ mhl (int argc, char **argv)
                case ISSUESW:
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
                case ISSUESW:
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
-                   else if ((issue = atoi (cp)) < 1)
+                   if ((issue = atoi (cp)) < 1)
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
                case VOLUMSW:
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
                case VOLUMSW:
                    if (!(cp = *argp++) || *cp == '-')
                        mhladios (NULL, "missing argument to %s", argp[-2]);
-                   else if ((volume = atoi (cp)) < 1)
+                   if ((volume = atoi (cp)) < 1)
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
 
                        mhladios (NULL, "bad argument %s %s", argp[-2], cp);
                    continue;
 
@@ -645,14 +641,12 @@ mhl_format (char *file, int length, int width)
                            c1->c_nfs = mh_xstrdup(global.c_nfs);
                            compile_formatfield(c1);
                        }
                            c1->c_nfs = mh_xstrdup(global.c_nfs);
                            compile_formatfield(c1);
                        }
-                   }
-                   else
-                       if (c1->c_flags & ADDRFMT) {
-                           if (global.c_flags & ADDRFMT) {
-                               c1->c_nfs = mh_xstrdup(global.c_nfs);
-                               compile_formatfield(c1);
-                           }
-                       }
+                   } else if (c1->c_flags & ADDRFMT) {
+                        if (global.c_flags & ADDRFMT) {
+                            c1->c_nfs = mh_xstrdup(global.c_nfs);
+                            compile_formatfield(c1);
+                        }
+                    }
                }
                continue;
 
                }
                continue;
 
@@ -668,9 +662,8 @@ mhl_format (char *file, int length, int width)
 
            fprintf (stderr, "c1: name=\"%s\" text=\"%s\" ovtxt=\"%s\"\n",
                    c1->c_name, c1->c_text, c1->c_ovtxt);
 
            fprintf (stderr, "c1: name=\"%s\" text=\"%s\" ovtxt=\"%s\"\n",
                    c1->c_name, c1->c_text, c1->c_ovtxt);
-           fprintf (stderr, "\tnfs=0x%x fmt=0x%x\n",
-                    (unsigned int)(unsigned long) c1->c_nfs,
-                    (unsigned int)(unsigned long) c1->c_fmt);
+           fprintf(stderr, "\tnfs=%p fmt=%p\n",
+                (void *)c1->c_nfs, (void *)c1->c_fmt);
            fprintf (stderr, "\toffset=%d ovoff=%d width=%d cwidth=%d length=%d\n",
                    c1->c_offset, c1->c_ovoff, c1->c_width,
                    c1->c_cwidth, c1->c_length);
            fprintf (stderr, "\toffset=%d ovoff=%d width=%d cwidth=%d length=%d\n",
                    c1->c_offset, c1->c_ovoff, c1->c_width,
                    c1->c_cwidth, c1->c_length);
@@ -920,7 +913,7 @@ process (char *folder, char *fname, int ofilen, int ofilec)
                SIGNAL (SIGINT, SIG_IGN);
            if (mhl_action == NULL && fp != stdin && fp != NULL)
                fclose (fp);
                SIGNAL (SIGINT, SIG_IGN);
            if (mhl_action == NULL && fp != stdin && fp != NULL)
                fclose (fp);
-            mh_xfree(holder.c_text);
+            free(holder.c_text);
             holder.c_text = NULL;
            free_queue (&msghd, &msgtl);
            for (c1 = fmthd; c1; c1 = c1->c_next)
             holder.c_text = NULL;
            free_queue (&msghd, &msgtl);
            for (c1 = fmthd; c1; c1 = c1->c_next)
@@ -950,7 +943,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec)
                printf (" Forwarded Message%s", PLURALS(ofilec));
            else
                printf (" Message %d", ofilen);
                printf (" Forwarded Message%s", PLURALS(ofilec));
            else
                printf (" Message %d", ofilen);
-           printf ("\n\n");
+           puts("\n");
        }
     } else {
        switch (ontty) {
        }
     } else {
        switch (ontty) {
@@ -960,7 +953,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec)
                        if ((global.c_flags & CLEARSCR))
                            nmh_clear_screen ();
                        else
                        if ((global.c_flags & CLEARSCR))
                            nmh_clear_screen ();
                        else
-                           printf ("\n\n\n");
+                            puts("\n\n");
                    }
                    printf (">>> %s\n\n", mname);
                }
                    }
                    printf (">>> %s\n\n", mname);
                }
@@ -971,7 +964,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec)
                if (ofilec > 1) {
                    if (SOprintf ("Press <return> to list \"%s\"...", mname)) {
                        if (ofilen > 1)
                if (ofilec > 1) {
                    if (SOprintf ("Press <return> to list \"%s\"...", mname)) {
                        if (ofilen > 1)
-                           printf ("\n\n\n");
+                           puts("\n\n");
                        printf ("Press <return> to list \"%s\"...", mname);
                    }
                    fflush (stdout);
                        printf ("Press <return> to list \"%s\"...", mname);
                    }
                    fflush (stdout);
@@ -991,7 +984,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec)
            default: 
                if (ofilec > 1) {
                    if (ofilen > 1) {
            default: 
                if (ofilec > 1) {
                    if (ofilen > 1) {
-                       printf ("\n\n\n");
+                       puts("\n\n");
                        if (clearflg > 0)
                            nmh_clear_screen ();
                    }
                        if (clearflg > 0)
                            nmh_clear_screen ();
                    }
@@ -1219,8 +1212,8 @@ mcomp_format (struct mcomp *c1, struct mcomp *c2)
        }
        charstring_free (scanl);
 
        }
        charstring_free (scanl);
 
-        mh_xfree(p->pq_text);
-        mh_xfree(p->pq_error);
+        free(p->pq_text);
+        free(p->pq_error);
        q = p->pq_next;
        free(p);
     }
        q = p->pq_next;
        free(p);
     }
@@ -1266,10 +1259,10 @@ free_queue (struct mcomp **head, struct mcomp **tail)
 
     for (c1 = *head; c1; c1 = c2) {
        c2 = c1->c_next;
 
     for (c1 = *head; c1; c1 = c2) {
        c2 = c1->c_next;
-        mh_xfree(c1->c_name);
-        mh_xfree(c1->c_text);
-        mh_xfree(c1->c_ovtxt);
-        mh_xfree(c1->c_nfs);
+        free(c1->c_name);
+        free(c1->c_text);
+        free(c1->c_ovtxt);
+        free(c1->c_nfs);
        if (c1->c_fmt)
            fmt_free (c1->c_fmt, 0);
        free(c1);
        if (c1->c_fmt)
            fmt_free (c1->c_fmt, 0);
        free(c1);
@@ -1297,7 +1290,7 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag)
     text = c1->c_text ? c1->c_text : c1->c_name;
     /* Create a copy with trailing whitespace trimmed, for use with
      * blank lines. */
     text = c1->c_text ? c1->c_text : c1->c_name;
     /* Create a copy with trailing whitespace trimmed, for use with
      * blank lines. */
-    trimmed_prefix = rtrim(add(text, NULL));
+    trimmed_prefix = rtrim(mh_xstrdup(FENDNULL(text)));
 
     cchdr = 0;
     lm = 0;
 
     cchdr = 0;
     lm = 0;
@@ -1308,7 +1301,7 @@ putcomp (struct mcomp *c1, struct mcomp *c2, int flag)
     if ((ovtxt = c1->c_ovtxt ? c1->c_ovtxt : global.c_ovtxt) == NULL)
        ovtxt = "";
     if (wid < ovoff + strlen (ovtxt) + 5)
     if ((ovtxt = c1->c_ovtxt ? c1->c_ovtxt : global.c_ovtxt) == NULL)
        ovtxt = "";
     if (wid < ovoff + strlen (ovtxt) + 5)
-       mhladios (NULL, "component: %s width(%d) too small for overflow(%d)",
+       mhladios(NULL, "component: %s width(%d) too small for overflow(%zu)",
                c1->c_name, wid, ovoff + strlen (ovtxt) + 5);
     onelp = NULL;
 
                c1->c_name, wid, ovoff + strlen (ovtxt) + 5);
     onelp = NULL;
 
@@ -1654,8 +1647,7 @@ mhldone (int status)
     exitstat = status;
     if (mhl_action)
        longjmp (mhlenv, DONE);
     exitstat = status;
     if (mhl_action)
        longjmp (mhlenv, DONE);
-    else
-       done (exitstat);
+    done (exitstat);
 }
 
 
 }