]> diplodocus.org Git - nmh/blobdiff - uip/msh.c
Plugged small memory leak in m_unknown().
[nmh] / uip / msh.c
index 03584f6d3119eb5b538482c476a7dd729f6d409f..7dc15d36fdd639e16ced955eb2507d2cd33129fe 100644 (file)
--- a/uip/msh.c
+++ b/uip/msh.c
@@ -150,6 +150,8 @@ int interrupted;            /* SIGINT detected  */
 int broken_pipe;               /* SIGPIPE detected */
 int told_to_quit;              /* SIGQUIT detected */
 
+extern m_getfld_state_t gstate;
+
 /*
  * prototypes
  */
@@ -235,10 +237,10 @@ main (int argc, char **argv)
                case HELPSW: 
                    snprintf (buf, sizeof(buf), "%s [switches] file", invo_name);
                    print_help (buf, switches, 1);
-                   done (1);
+                   done (0);
                case VERSIONSW:
                    print_version(invo_name);
-                   done (1);
+                   done (0);
 
                case IDSW: 
                    if (!(cp = *argp++) || *cp == '-')
@@ -342,6 +344,7 @@ main (int argc, char **argv)
 #endif /* SIGTSTP */
     }
 
+    m_getfld_state_init (&gstate);
     if (folder)
        fsetup (folder);
     else
@@ -350,6 +353,7 @@ main (int argc, char **argv)
     display_info (id > 0 ? scansw : 0);
 
     msh (id > 0 ? scansw : 0);
+    m_getfld_state_destroy (&gstate);
 
     m_reset ();
     
@@ -713,7 +717,7 @@ setup (char *file)
     mp->msgattrs[0] = getcpy ("unseen");
     mp->msgattrs[1] = NULL;
 
-    m_unknown (fp);            /* the MAGIC invocation */    
+    m_unknown (gstate, fp);            /* the MAGIC invocation */
     if (fmsh) {
        free (fmsh);
        fmsh = NULL;
@@ -836,7 +840,7 @@ msh_ready (int msgnum, int full)
        return yp;
     }
 
-    m_eomsbr ((int (*)()) 0);  /* XXX */
+    m_eomsbr (gstate, (int (*)()) 0);  /* XXX */
     fseek (fp, Msgs[msgnum].m_start, SEEK_SET);
     return fp;
 }
@@ -1005,15 +1009,16 @@ readid (int msgnum)
        return Msgs[msgnum].m_bboard_id;
 
     zp = msh_ready (msgnum, 0);
-    for (state = FLD;;)
-       switch (state = m_getfld (state, name, buf, sizeof(buf), zp)) {
+    for (;;) {
+       int bufsz = sizeof buf;
+       switch (state = m_getfld (gstate, name, buf, &bufsz, zp)) {
            case FLD: 
-           case FLDEOF: 
            case FLDPLUS: 
                if (!mh_strcasecmp (name, BBoard_ID)) {
                    bp = getcpy (buf);
                    while (state == FLDPLUS) {
-                       state = m_getfld (state, name, buf, sizeof(buf), zp);
+                       bufsz = sizeof buf;
+                       state = m_getfld (gstate, name, buf, &bufsz, zp);
                        bp = add (buf, bp);
                    }
                    i = atoi (bp);
@@ -1024,13 +1029,14 @@ readid (int msgnum)
                        continue;
                }
                while (state == FLDPLUS)
-                   state = m_getfld (state, name, buf, sizeof(buf), zp);
-               if (state != FLDEOF)
-                   continue;
+                   bufsz = sizeof buf;
+                   state = m_getfld (gstate, name, buf, &bufsz, zp);
+               continue;
 
            default: 
                return 0;
        }
+    }
 }