#include "substdio.h"
#include "strerr.h"
#include "subfd.h"
#include "getln.h"
#include "mess822.h"
#include "case.h"
#include "env.h"
#include "exit.h"

#define FATAL "iftocc: fatal: "

void nomem()
{
  strerr_die2x(111,FATAL,"out of memory");
}

stralloc addrlist = {0};

mess822_header h = MESS822_HEADER;
mess822_action a[] = {
  { "to", 0, 0, 0, &addrlist, 0 }
, { "cc", 0, 0, 0, &addrlist, 0 }
, { 0, 0, 0, 0, 0, 0 }
} ;

stralloc line = {0};
int match;

char *recipient;
char **recips;

void check(addr)
char *addr;
{
  int i;

  if (recipient)
    if (case_equals(addr,recipient)) _exit(0);

  if (!recipient)
    for (i = 0;recips[i];++i)
      if (case_equals(addr,recips[i])) _exit(0);
}

void main(argc,argv)
int argc;
char **argv;
{
  int i;
  int j;

  recipient = env_get("RECIPIENT");
  recips = argv + 1;
  if (*recips) recipient = 0;

  if (!mess822_begin(&h,a)) nomem();

  for (;;) {
    if (getln(subfdinsmall,&line,&match,'\n') == -1)
      strerr_die2sys(111,FATAL,"unable to read input: ");

    if (!mess822_ok(&line)) break;
    if (!mess822_line(&h,&line)) nomem();
    if (!match) break;
  }

  if (!mess822_end(&h)) nomem();

  for (j = i = 0;j < addrlist.len;++j)
    if (!addrlist.s[j]) {
      if (addrlist.s[i] == '+')
	check(addrlist.s + i + 1);
      i = j + 1;
    }

  _exit(100);
}


syntax highlighted by Code2HTML, v. 0.9.1