#include <errno.h>
#include <setjmp.h>
#include <signal.h>
-#include <h/mts.h>
#include <h/tws.h>
#include <h/mime.h>
#include <h/mhparse.h>
store_switch(CT ct)
{
switch (ct->c_type) {
- case CT_MULTIPART:
- return store_multi(ct);
+ case CT_MULTIPART:
+ return store_multi(ct);
+ break;
+
+ case CT_MESSAGE:
+ switch (ct->c_subtype) {
+ case MESSAGE_PARTIAL:
+ return store_partial(ct);
break;
- case CT_MESSAGE:
- switch (ct->c_subtype) {
- case MESSAGE_PARTIAL:
- return store_partial(ct);
- break;
-
- case MESSAGE_EXTERNAL:
- return store_external(ct);
-
- case MESSAGE_RFC822:
- default:
- return store_generic(ct);
- break;
- }
- break;
-
- case CT_APPLICATION:
- return store_application(ct);
- break;
-
- case CT_TEXT:
- case CT_AUDIO:
- case CT_IMAGE:
- case CT_VIDEO:
- return store_generic(ct);
- break;
+ case MESSAGE_EXTERNAL:
+ return store_external(ct);
+ case MESSAGE_RFC822:
default:
- adios(NULL, "unknown content type %d", ct->c_type);
+ return store_generic(ct);
break;
+ }
+ break;
+
+ case CT_APPLICATION:
+ return store_application(ct);
+ break;
+
+ case CT_TEXT:
+ case CT_AUDIO:
+ case CT_IMAGE:
+ case CT_VIDEO:
+ return store_generic(ct);
+ break;
+
+ default:
+ adios(NULL, "unknown content type %d", ct->c_type);
+ break;
}
return OK; /* NOT REACHED */
}
if (tarP) {
- ct->c_showproc = add(zP ? "%euncompress | tar tvf -" : (gzP ? "%egzip -dc | tar tvf -" : "%etar tvf -"), NULL);
+ ct->c_showproc = getcpy(zP ? "%euncompress | tar tvf -" : (gzP ? "%egzip -dc | tar tvf -" : "%etar tvf -"));
if (!ct->c_storeproc) {
if (autosw) {
- ct->c_storeproc = add(zP ? "| uncompress | tar xvpf -" : (gzP ? "| gzip -dc | tar xvpf -" : "| tar xvpf -"), NULL);
+ ct->c_storeproc = getcpy(zP ? "| uncompress | tar xvpf -" : (gzP ? "| gzip -dc | tar xvpf -" : "| tar xvpf -"));
ct->c_umask = 0022;
} else {
- ct->c_storeproc= add(zP ? "%m%P.tar.Z" : (gzP ? "%m%P.tar.gz" : "%m%P.tar"), NULL);
+ ct->c_storeproc= getcpy(zP ? "%m%P.tar.Z" : (gzP ? "%m%P.tar.gz" : "%m%P.tar"));
}
}
}
if ((cp = e->eb_name) && *cp != '/' && *cp != '.' &&
*cp != '|' && *cp != '!' && !strchr(cp, '%')) {
if (!ct->c_storeproc)
- ct->c_storeproc = add(cp, NULL);
+ ct->c_storeproc = getcpy(cp);
if (!p->c_storeproc)
- p->c_storeproc = add(cp, NULL);
+ p->c_storeproc = getcpy(cp);
}
}
*/
if (p) {
appending = 1;
- ct->c_storage = add(p->c_storage, NULL);
+ ct->c_storage = getcpy(p->c_storage);
/* record the folder name */
if (p->c_folder) {
- ct->c_folder = add(p->c_folder, NULL);
+ ct->c_folder = getcpy(p->c_folder);
}
goto got_filename;
}
/* Store content in temporary file for now */
tmpfilenam = m_mktemp(invo_name, NULL, NULL);
- ct->c_storage = add(tmpfilenam, NULL);
+ ct->c_storage = getcpy(tmpfilenam);
/* Get the folder name */
if (cp[1])
- folder = pluspath(cp);
+ folder = getcpy(expandfol(cp));
else
- folder = getfolder(FCUR);
+ folder = getcurfol();
/* Check if folder exists */
- create_folder(m_mailpath(folder), 0, exit);
+ create_folder(toabsdir(folder), 0, exit);
/* Record the folder name */
- ct->c_folder = add(folder, NULL);
+ ct->c_folder = getcpy(folder);
if (cp[1])
free(folder);
return show_content_aux(ct, 1, 0, buffer + 1, dir);
/* record the filename */
- ct->c_storage = add(buffer, NULL);
+ ct->c_storage = getcpy(buffer);
got_filename:
/* flush the output stream */
if (ct->c_folder) {
fprintf(stderr, " to folder %s as message %d\n",
ct->c_folder, msgnum);
- } else if (!strcmp(ct->c_storage, "-")) {
+ } else if (strcmp(ct->c_storage, "-")==0) {
fprintf(stderr, " to stdout\n");
} else {
int cwdlen;
cwdlen = strlen(cwd);
fprintf(stderr, " as file %s\n",
- strncmp(ct->c_storage, cwd, cwdlen) ||
+ strncmp(ct->c_storage, cwd,
+ cwdlen)!=0 ||
ct->c_storage[cwdlen] != '/' ?
ct->c_storage :
ct->c_storage + cwdlen + 1);
return NOTOK;
}
- file = appending || !strcmp(ct->c_storage, "-") ?
+ file = appending || strcmp(ct->c_storage, "-")==0 ?
NULL : ct->c_storage;
if ((fd = (*ct->c_ceopenfnx) (ct, &file)) == NOTOK)
return NOTOK;
- if (!strcmp(file, ct->c_storage)) {
+ if (strcmp(file, ct->c_storage)==0) {
(*ct->c_ceclosefnx) (ct);
return OK;
}
/*
** Send to standard output
*/
- if (!strcmp(ct->c_storage, "-")) {
+ if (strcmp(ct->c_storage, "-")==0) {
int gd;
if ((gd = dup(fileno(stdout))) == NOTOK) {
for (;;) {
switch (cc = read(fd, buffer, sizeof(buffer))) {
- case NOTOK:
- advise(file, "error reading content from");
- break;
+ case NOTOK:
+ advise(file, "error reading content from");
+ break;
- case OK:
- break;
+ case OK:
+ break;
- default:
- fwrite(buffer, sizeof(*buffer),
- cc, fp);
- continue;
+ default:
+ fwrite(buffer, sizeof(*buffer), cc, fp);
+ continue;
}
break;
}
last = ct->c_end;
fseek(ct->c_fp, pos, SEEK_SET);
- if (!strcmp(ct->c_storage, "-")) {
+ if (strcmp(ct->c_storage, "-")==0) {
int gd;
if ((gd = dup(fileno(stdout))) == NOTOK) {
*/
if (filterstate) {
switch (buffer[0]) {
- case ' ':
- case '\t':
- if (filterstate < 0)
- buffer[0] = 0;
- break;
+ case ' ':
+ case '\t':
+ if (filterstate < 0)
+ buffer[0] = 0;
+ break;
- case '\n':
- filterstate = 0;
- break;
+ case '\n':
+ filterstate = 0;
+ break;
- default:
- if (!uprf(buffer, XXX_FIELD_PRF) && !uprf(buffer, VRSN_FIELD) && !uprf(buffer, "Subject:") && !uprf(buffer, "Encrypted:") && !uprf(buffer, "Message-ID:")) {
- filterstate = -1;
- buffer[0] = 0;
- break;
- }
- filterstate = 1;
+ default:
+ if (!uprf(buffer, XXX_FIELD_PRF) && !uprf(buffer, VRSN_FIELD) && !uprf(buffer, "Subject:") && !uprf(buffer, "Message-ID:")) {
+ filterstate = -1;
+ buffer[0] = 0;
break;
+ }
+ filterstate = 1;
+ break;
}
}
fputs(buffer, fp);
/* Read the folder. */
if ((mp = folder_read(folder))) {
/* Link file into folder */
- msgnum = folder_addmsg(&mp, filename, 0, 0, 0, 0, (char *)0);
+ msgnum = folder_addmsg(&mp, filename, 0, 0, 0, 0, NULL);
} else {
advise(NULL, "unable to read folder %s", folder);
return NOTOK;
/* We are processing a storage escape */
if (*cp == '%') {
switch (*++cp) {
- case 'a':
- /*
- ** Insert parameters from Content-Type.
- ** This is only valid for '|' commands.
- */
- if (buffer[0] != '|' && buffer[0] != '!') {
- *bp++ = *--cp;
- *bp = '\0';
- buflen--;
- continue;
- } else {
- char **ap, **ep;
- char *s = "";
-
- for (ap = ci->ci_attrs, ep = ci->ci_values;
- *ap; ap++, ep++) {
- snprintf(bp, buflen, "%s%s=\"%s\"", s, *ap, *ep);
- len = strlen(bp);
- bp += len;
- buflen -= len;
- s = " ";
- }
+ case 'a':
+ /*
+ ** Insert parameters from Content-Type.
+ ** This is only valid for '|' commands.
+ */
+ if (buffer[0] != '|' && buffer[0] != '!') {
+ *bp++ = *--cp;
+ *bp = '\0';
+ buflen--;
+ continue;
+ } else {
+ char **ap, **ep;
+ char *s = "";
+
+ for (ap=ci->ci_attrs, ep=ci->ci_values;
+ *ap; ap++, ep++) {
+ snprintf(bp, buflen,
+ "%s%s=\"%s\"",
+ s, *ap, *ep);
+ len = strlen(bp);
+ bp += len;
+ buflen -= len;
+ s = " ";
}
- break;
+ }
+ break;
- case 'm':
- /* insert message number */
- snprintf(bp, buflen, "%s", mhbasename(ct->c_file));
- break;
+ case 'm':
+ /* insert message number */
+ snprintf(bp, buflen, "%s",
+ mhbasename(ct->c_file));
+ break;
- case 'P':
- /* insert part number with leading dot */
- if (ct->c_partno)
- snprintf(bp, buflen, ".%s", ct->c_partno);
- break;
+ case 'P':
+ /* insert part number with leading dot */
+ if (ct->c_partno)
+ snprintf(bp, buflen, ".%s",
+ ct->c_partno);
+ break;
- case 'p':
- /* insert part number withouth leading dot */
- if (ct->c_partno)
- strncpy(bp, ct->c_partno, buflen);
- break;
+ case 'p':
+ /* insert part number withouth leading dot */
+ if (ct->c_partno)
+ strncpy(bp, ct->c_partno, buflen);
+ break;
- case 't':
- /* insert content type */
- strncpy(bp, ci->ci_type, buflen);
- break;
+ case 't':
+ /* insert content type */
+ strncpy(bp, ci->ci_type, buflen);
+ break;
- case 's':
- /* insert content subtype */
- strncpy(bp, ci->ci_subtype, buflen);
- break;
+ case 's':
+ /* insert content subtype */
+ strncpy(bp, ci->ci_subtype, buflen);
+ break;
- case '%':
- /* insert the character % */
- goto raw;
+ case '%':
+ /* insert the character % */
+ goto raw;
- default:
- *bp++ = *--cp;
- *bp = '\0';
- buflen--;
- continue;
+ default:
+ *bp++ = *--cp;
+ *bp = '\0';
+ buflen--;
+ continue;
}
/* Advance bp and decrement buflen */
if (!mh_strcasecmp(*ap, "name") && *(cp = *ep) != '/' &&
*cp != '.' && *cp != '|' && *cp != '!' &&
!strchr(cp, '%')) {
- ct->c_storeproc = add(cp, NULL);
+ ct->c_storeproc = getcpy(cp);
return;
}
}
if (!uprf(hp->name, XXX_FIELD_PRF) &&
mh_strcasecmp(hp->name, VRSN_FIELD) &&
mh_strcasecmp(hp->name, "Subject") &&
- mh_strcasecmp(hp->name, "Encrypted") &&
mh_strcasecmp(hp->name, "Message-ID"))
fprintf(out, "%s:%s", hp->name, hp->value);
hp = hp->next; /* next header field */