- if (packfile) {
- fseek (pf, 0L, SEEK_CUR);
- pos = ftell (pf);
- size = 0;
- if (fwrite (mmdlm1, 1, strlen (mmdlm1), pf) < strlen (mmdlm1)) {
- advise (mmdlm1, "fwrite");
- }
- start = ftell (pf);
-
- if (pop_retr (i, pop_pack) == NOTOK)
- adios (NULL, "%s", response);
-
- fseek (pf, 0L, SEEK_CUR);
- stop = ftell (pf);
- if (fflush (pf))
- adios (packfile, "write error on");
- fseek (pf, start, SEEK_SET);
- } else {
- cp = getcpy (m_name (msgnum));
- if ((pf = fopen (cp, "w+")) == NULL)
- adios (cp, "unable to write");
- chmod (cp, m_gmprot ());
- start = stop = 0L;
-
- if (pop_retr (i, pop_action) == NOTOK)
- adios (NULL, "%s", response);
-
- if (fflush (pf))
- adios (cp, "write error on");
- fseek (pf, 0L, SEEK_SET);
- }
+ cp = mh_xstrdup(m_name (msgnum));
+ if ((pf = fopen (cp, "w+")) == NULL)
+ adios (cp, "unable to write");
+ chmod (cp, m_gmprot ());
+
+ pc.written = 0;
+ pc.mailout = pf;
+ if (pop_retr(i, pop_action, &pc) == NOTOK)
+ adios (NULL, "%s", response);
+
+ if (fflush (pf))
+ adios (cp, "write error on");
+ fseek (pf, 0L, SEEK_SET);