Back to index

courier  0.68.2
Functions
rfc2045acchk.c File Reference
#include "rfc2045.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

Go to the source code of this file.

Functions

void rfc2045_enomem ()
int rfc2045_ac_check (struct rfc2045 *p, int rwmode)

Function Documentation

int rfc2045_ac_check ( struct rfc2045 p,
int  rwmode 
)

Definition at line 20 of file rfc2045acchk.c.

{
int    flag=0;              /* Flag - rewriting suggested */
struct rfc2045 *c;
int    hasnon7bit=p->has8bitchars;
              /* hasnon7bit: 8bit chars in this section or subsections */
const char *te;
int    is8bitte;

       for (c=p->firstpart; c; c=c->next)
              if (!c->isdummy)
              {
                     if (rfc2045_ac_check(c, rwmode))   flag=1;
                     if (c->content_transfer_encoding &&
                         strcmp(c->content_transfer_encoding, "7bit") &&
                         strcmp(c->content_transfer_encoding, "uuencode") &&
                            strcmp(c->content_transfer_encoding, "quoted-printable"))
                            hasnon7bit=1;
                     if (c->has8bitchars)
                            p->has8bitchars=1;
              }

       if (RFC2045_ISMIME1DEF(p->mime_version) && !p->content_type)
       {
              if ((p->content_type=strdup("text/plain")) == 0)
                     rfc2045_enomem();
              if (p->mime_version)
              {
                     flag=1;
              }
       }

       if (RFC2045_ISMIME1DEF(p->mime_version)
              && !rfc2045_getattr(p->content_type_attr, "charset")
              && strncasecmp(p->content_type, "text/", 5) == 0)
       {
              if (rfc2045_attrset(&p->content_type_attr, "charset",
                                rfc2045_getdefaultcharset()) < 0)
                     rfc2045_enomem();

              if (p->mime_version

                     && p->firstpart == 0 /* sam - don't trigger rewrites on changes to multipart headers */

                     )
              {
                     flag=1;
              }
       }

       if (RFC2045_ISMIME1DEF(p->mime_version)
              && !p->content_transfer_encoding)
       {
              if ((p->content_transfer_encoding=strdup(
                     hasnon7bit ? "8bit":"7bit")) == 0)
                     rfc2045_enomem();
              if (p->mime_version

                     && p->firstpart == 0 /* sam - don't trigger rewrites on changes to multipart headers */
                     )
              {
                     flag=1;
              }
       }

#if 0
       if (RFC2045_ISMIME1DEF(p->mime_version)
              && strncmp(p->content_type, "text/", 5) == 0 && !hasnon7bit
              && strcmp(p->content_transfer_encoding, "7bit"))
       {
              if (p->mime_version)
              {
                     flag=1;
              }
       }
#endif

       if (RFC2045_ISMIME1DEF(p->mime_version))
       {
              /* Check for conversions */

              te=p->content_transfer_encoding;
              is8bitte=strcasecmp(te, "base64") &&
                     strcasecmp(te, "quoted-printable") &&
                     strcasecmp(te, "uuencode") &&
                     strcasecmp(te, "7bit");     /* 8 bit contents */

              if (is8bitte && !p->has8bitchars && !p->haslongline)
              {
                     if (p->rw_transfer_encoding)
                            free(p->rw_transfer_encoding);
                     if ((p->rw_transfer_encoding=strdup("7bit")) == 0)
                            rfc2045_enomem();
                     flag=1;
                     is8bitte=0;
              }

              if (rwmode == RFC2045_RW_7BIT && (is8bitte || p->haslongline))
              {
                     if (p->rw_transfer_encoding)
                            free(p->rw_transfer_encoding);
                     if ((p->rw_transfer_encoding=strdup("quoted-printable"))
                            == 0)
                            rfc2045_enomem();
                     flag=1;
              }
              else if (rwmode == RFC2045_RW_8BIT &&
                     strcasecmp(te, "quoted-printable") == 0 &&
                     !p->haslongline)
              {
                     if (p->rw_transfer_encoding)
                            free(p->rw_transfer_encoding);
                     if ((p->rw_transfer_encoding=strdup(hasnon7bit
                                   ? "8bit":"7bit")) == 0)
                            rfc2045_enomem();
                     flag=1;
              }
       }

       if (!p->mime_version)
       {
              if ((p->mime_version=strdup("1.0")) == 0)
                     rfc2045_enomem();
       }
       return (flag);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void rfc2045_enomem ( )

Definition at line 44 of file pcp.c.

{
       fprintf(stderr, "Out of memory.\n");
       exit(1);
}