void closefds(int);
char *concat (const char *, ...);
int context_del (char *);
-char *context_find (char *);
+char *context_find (const char *);
+char *context_find_by_type (const char *, const char *, const char *);
int context_foil (char *);
void context_read (void);
void context_replace (char *, char *);
char *
-context_find (char *str)
+context_find (const char *str)
{
struct node *np;
return NULL;
}
+
+
+/*
+ * Helper function to search first, if subtype is non-NULL, for
+ * invoname-string-type/subtype and then invoname-string-type.
+ * If entry is found but is empty, returns NULL.
+ */
+char *
+context_find_by_type (const char *string, const char *type,
+ const char *subtype) {
+ char *value = NULL;
+
+ if (subtype) {
+ char *cp;
+
+ cp = concat (invo_name, "-", string, "-", type, "/", subtype, NULL);
+ if ((value = context_find (cp)) != NULL && *value == '\0') value = NULL;
+ free (cp);
+ }
+
+ if (value == NULL) {
+ char *cp;
+
+ cp = concat (invo_name, "-", string, "-", type, NULL);
+ if ((value = context_find (cp)) != NULL && *value == '\0') value = NULL;
+ free (cp);
+ }
+
+ return value;
+}
* No [file] argument, so check profile for
* method to compose content.
*/
- snprintf (buffer, sizeof(buffer), "%s-compose-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- if ((cp = context_find (buffer)) == NULL || *cp == '\0') {
- snprintf (buffer, sizeof(buffer), "%s-compose-%s", invo_name, ci->ci_type);
- if ((cp = context_find (buffer)) == NULL || *cp == '\0') {
- content_error (NULL, ct, "don't know how to compose content");
- done (1);
- }
+ cp = context_find_by_type ("compose", ci->ci_type, ci->ci_subtype);
+ if (cp == NULL) {
+ content_error (NULL, ct, "don't know how to compose content");
+ done (1);
}
ci->ci_magic = add (cp, NULL);
return OK;
char *type, *simplename = r1bindex(filename, '/');
struct str2init *s2i;
PM pm;
- char buffer[BUFSIZ], *cp;
- int no_subtype = 0;
+ char *cp;
if (! (type = mime_type(filename))) {
adios(NULL, "Unable to determine MIME type of \"%s\"", filename);
* 'attachment'.
*/
- snprintf (buffer, sizeof(buffer), "%s-disposition-%s/%s",
- invo_name, ct->c_ctinfo.ci_type, ct->c_ctinfo.ci_subtype);
- cp = context_find (buffer);
- if (cp == NULL || *cp == '\0') {
- no_subtype = 1;
- snprintf (buffer, sizeof(buffer), "%s-disposition-%s", invo_name,
- ct->c_ctinfo.ci_type);
- cp = context_find (buffer);
- }
- if (cp != NULL && *cp != '\0') {
- if (strcasecmp (cp, "attachment") &&
- strcasecmp (cp, "inline")) {
+ cp = context_find_by_type ("disposition", ct->c_ctinfo.ci_type,
+ ct->c_ctinfo.ci_subtype);
+ if (cp != NULL) {
+ if (strcasecmp (cp, "attachment") && strcasecmp (cp, "inline")) {
admonish (NULL, "configuration problem: %s-disposition-%s%s%s "
"specifies '%s' but only 'attachment' and 'inline' are "
"allowed", invo_name,
ct->c_ctinfo.ci_type,
- no_subtype ? "" : "/",
- no_subtype ? "" : ct->c_ctinfo.ci_subtype,
+ ct->c_ctinfo.ci_subtype ? "/" : "",
+ ct->c_ctinfo.ci_subtype ? ct->c_ctinfo.ci_subtype : "",
cp);
}
}
Could show_multi() in mhshowsbr.c avoid this? */
/* Check for invo_name-format-type/subtype. */
- cp = concat (invo_name, "-format-", type, "/", subtype, NULL);
- if ((cf = context_find (cp)) && *cf != '\0') {
+ if ((cf = context_find_by_type ("format", type, subtype)) == NULL) {
+ if (verbosw) {
+ advise (NULL, "Don't know how to convert %s, there is no "
+ "%s-format-%s/%s profile entry",
+ ct->c_file, invo_name, type, subtype);
+ }
+ return NOTOK;
+ } else {
if (strchr (cf, '>')) {
- free (cp);
advise (NULL, "'>' prohibited in \"%s\",\nplease fix your "
"%s-format-%s/%s profile entry", cf, invo_name, type,
- subtype);
- return NOTOK;
- }
- } else {
- free (cp);
-
- /* Check for invo_name-format-type. */
- cp = concat (invo_name, "-format-", type, NULL);
- if (! (cf = context_find (cp)) || *cf == '\0') {
- free (cp);
- if (verbosw) {
- advise (NULL, "Don't know how to convert %s, there is no "
- "%s-format-%s/%s profile entry",
- ct->c_file, invo_name, type, subtype);
- }
- return NOTOK;
- }
+ subtype ? subtype : "");
- if (strchr (cf, '>')) {
- free (cp);
- advise (NULL, "'>' prohibited in \"%s\"", cf);
return NOTOK;
}
}
- free (cp);
cp = concat (cf, " >", file, NULL);
status = show_content_aux (ct, 0, cp, NULL, NULL);
/* sbeck@cise.ufl.edu -- handle suffixes */
ci = &ct->c_ctinfo;
- snprintf (buffer, sizeof(buffer), "%s-suffix-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- cp = context_find (buffer);
- if (cp == NULL || *cp == '\0') {
- snprintf (buffer, sizeof(buffer), "%s-suffix-%s", invo_name,
- ci->ci_type);
- cp = context_find (buffer);
- }
- if (cp != NULL && *cp != '\0') {
+ if ((cp = context_find_by_type ("suffix", ci->ci_type, ci->ci_subtype))) {
if (ce->ce_unlink) {
/* Create temporary file with filename extension. */
if ((ce->ce_file = m_mktemps(invo_name, cp, NULL, NULL)) == NULL) {
{
int cc, digested, len, quoted, own_ct_fp = 0;
char *cp, *ep;
- char buffer[BUFSIZ];
char *bufp = NULL;
size_t buflen;
ssize_t gotlen;
/* sbeck@cise.ufl.edu -- handle suffixes */
ci = &ct->c_ctinfo;
- snprintf (buffer, sizeof(buffer), "%s-suffix-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- cp = context_find (buffer);
- if (cp == NULL || *cp == '\0') {
- snprintf (buffer, sizeof(buffer), "%s-suffix-%s", invo_name,
- ci->ci_type);
- cp = context_find (buffer);
- }
- if (cp != NULL && *cp != '\0') {
+ if ((cp = context_find_by_type ("suffix", ci->ci_type, ci->ci_subtype))) {
if (ce->ce_unlink) {
/* Create temporary file with filename extension. */
if ((ce->ce_file = m_mktemps(invo_name, cp, NULL, NULL)) == NULL) {
/* sbeck@cise.ufl.edu -- handle suffixes */
ci = &ct->c_ctinfo;
- snprintf (buffer, sizeof(buffer), "%s-suffix-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- cp = context_find (buffer);
- if (cp == NULL || *cp == '\0') {
- snprintf (buffer, sizeof(buffer), "%s-suffix-%s", invo_name,
- ci->ci_type);
- cp = context_find (buffer);
- }
- if (cp != NULL && *cp != '\0') {
+ if ((cp = context_find_by_type ("suffix", ci->ci_type, ci->ci_subtype))) {
if (ce->ce_unlink) {
/* Create temporary file with filename extension. */
if ((ce->ce_file = m_mktemps(invo_name, cp, NULL, NULL)) == NULL) {
show_content (CT ct, int alternate, int textonly, int inlineonly,
struct format *fmt)
{
- char *cp, buffer[BUFSIZ];
+ char *cp;
CI ci = &ct->c_ctinfo;
/*
return OK;
}
- /* Check for invo_name-show-type/subtype */
- snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, alternate, cp, NULL, fmt);
-
- /* Check for invo_name-show-type */
- snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
- if ((cp = context_find (buffer)) && *cp != '\0')
+ /* Check for invo_name-show-type[/subtype] */
+ if ((cp = context_find_by_type ("show", ci->ci_type, ci->ci_subtype)))
return show_content_aux (ct, alternate, cp, NULL, fmt);
if ((cp = ct->c_showproc))
char *cp, buffer[BUFSIZ];
CI ci = &ct->c_ctinfo;
- /* Check for invo_name-show-type/subtype */
- snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, alternate, cp, NULL, fmt);
-
- /* Check for invo_name-show-type */
- snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
- if ((cp = context_find (buffer)) && *cp != '\0')
+ /* Check for invo_name-show-type[/subtype] */
+ if ((cp = context_find_by_type ("show", ci->ci_type, ci->ci_subtype)))
return show_content_aux (ct, alternate, cp, NULL, fmt);
/*
show_multi (CT ct, int alternate, int concatsw, int textonly, int inlineonly,
struct format *fmt)
{
- char *cp, buffer[BUFSIZ];
+ char *cp;
CI ci = &ct->c_ctinfo;
- /* Check for invo_name-show-type/subtype */
- snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- if ((cp = context_find (buffer)) && *cp != '\0')
- return show_multi_aux (ct, alternate, cp, fmt);
-
- /* Check for invo_name-show-type */
- snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
- if ((cp = context_find (buffer)) && *cp != '\0')
+ /* Check for invo_name-show-type[/subtype] */
+ if ((cp = context_find_by_type ("show", ci->ci_type, ci->ci_subtype)))
return show_multi_aux (ct, alternate, cp, fmt);
if ((cp = ct->c_showproc))
static int
show_message_rfc822 (CT ct, int alternate, struct format *fmt)
{
- char *cp, buffer[BUFSIZ];
+ char *cp;
CI ci = &ct->c_ctinfo;
- /* Check for invo_name-show-type/subtype */
- snprintf (buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- if ((cp = context_find (buffer)) && *cp != '\0')
- return show_content_aux (ct, alternate, cp, NULL, fmt);
-
- /* Check for invo_name-show-type */
- snprintf (buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
- if ((cp = context_find (buffer)) && *cp != '\0')
+ /* Check for invo_name-show-type[/subtype] */
+ if ((cp = context_find_by_type ("show", ci->ci_type, ci->ci_subtype)))
return show_content_aux (ct, alternate, cp, NULL, fmt);
if ((cp = ct->c_showproc))
if ((cp = ct->c_storeproc) == NULL || *cp == '\0') {
CI ci = &ct->c_ctinfo;
- snprintf (buffer, sizeof(buffer), "%s-store-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
- if ((cp = context_find (buffer)) == NULL || *cp == '\0') {
- snprintf (buffer, sizeof(buffer), "%s-store-%s", invo_name, ci->ci_type);
- if ((cp = context_find (buffer)) == NULL || *cp == '\0') {
- cp = ct->c_type == CT_MESSAGE ? "+" : "%m%P.%s";
- }
+ cp = context_find_by_type ("store", ci->ci_type, ci->ci_subtype);
+ if (cp == NULL) {
+ cp = ct->c_type == CT_MESSAGE ? "+" : "%m%P.%s";
}
}