mhshow/mhstore: Removed support for retrieving message/external-body parts.
[mmh] / uip / mhstore.c
index 50c911c..f4d664d 100644 (file)
@@ -466,7 +466,6 @@ store_switch(CT ct)
 ** Generic routine to store a MIME content.
 ** (application, audio, video, image, text, message/rfc922)
 */
-
 static int
 store_generic(CT ct)
 {
@@ -477,10 +476,8 @@ store_generic(CT ct)
        ** Check if the content specifies a filename in its MIME parameters.
        ** Don't bother with this for type "message"
        ** (only the "message" subtype "rfc822" will use store_generic).
-       ** The storeproc may already be defined, if this content
-       ** is part of a "message/external", for instance.
        */
-       if (autosw && ct->c_type != CT_MESSAGE && !ct->c_storeproc) {
+       if (autosw && ct->c_type != CT_MESSAGE) {
                /*
                ** Check the attribute/value pairs, for the attribute "name".
                ** If found, take the basename, do a few sanity checks and
@@ -633,50 +630,36 @@ losing:
 
 
 /*
-** Store content from a message of type "message/external".
+** Show how to retrieve content of type "message/external".
 */
-
 static int
 store_external(CT ct)
 {
-       int result = NOTOK;
-       struct exbody *e = (struct exbody *) ct->c_ctparams;
-       CT p = e->eb_content;
-
-       if (!type_ok(p, 1))
-               return OK;
+       char **ap, **ep;
+       char *msg;
+       FILE *fp;
+       char buf[BUFSIZ];
 
-       /*
-       ** Check if the parameters for the external body
-       ** specified a filename.
-       */
-       if (autosw) {
-               char *cp;
-
-               cp = mhbasename(e->eb_name);
-               if (*cp && *cp!='.' && *cp!='|' && *cp!='!' &&
-                               !strchr(cp, '%')) {
-                       /* filename looks good: use it */
-                       if (!ct->c_storeproc)
-                               ct->c_storeproc = getcpy(cp);
-                       if (!p->c_storeproc)
-                               p->c_storeproc = getcpy(cp);
+       msg = add("You need to fetch the contents yourself:", NULL);
+       ap = ct->c_ctinfo.ci_attrs;
+       ep = ct->c_ctinfo.ci_values;
+       for (; *ap; ap++, ep++) {
+               msg = add(concat("\n\t", *ap, ": ", *ep, NULL), msg);
+       }
+       if (!(fp = fopen(ct->c_file, "r"))) {
+               adios(ct->c_file, "unable to open");
+       }
+       fseek(fp, ct->c_begin, SEEK_SET);
+       while (!feof(fp) && ftell(fp) < ct->c_end) {
+               if (!fgets(buf, sizeof buf, fp)) {
+                       adios(ct->c_file, "unable to read");
                }
+               *strchr(buf, '\n') = '\0';
+               msg = add(concat("\n\t", buf, NULL), msg);
        }
-
-       /*
-       ** Since we will let the Content structure for the
-       ** external body substitute for the current content,
-       ** we temporarily change its partno (number inside
-       ** multipart), so everything looks right.
-       */
-       p->c_partno = ct->c_partno;
-
-       /* we probably need to check if content is really there */
-       result = store_switch(p);
-
-       p->c_partno = NULL;
-       return result;
+       fclose(fp);
+       advise(NULL, msg);
+       return OK;
 }
 
 
@@ -766,7 +749,7 @@ store_content(CT ct, CT p)
        ** 4) Else if content is "message", use "+" (current folder)
        ** 5) Else use string "%m%P.%s".
        */
-       if ((cp = ct->c_storeproc) == NULL || *cp == '\0') {
+       if (!(cp = ct->c_storeproc) || !*cp) {
                CI ci = &ct->c_ctinfo;
 
                snprintf(buffer, sizeof(buffer), "%s-store-%s/%s",