var_hash = new_var_hash();
current_headers = make_hlist();
+ current_body = get_body();
// print_headers(current_headers);
save_current_headers(var_hash);
/* lex.c */
#define CC(a,b) ((a<<8)|b)
void* xmalloc(size_t size);
+void* xrealloc(void* buf, size_t size);
char* xstrdup(char* s);
void __attribute__ ((noreturn)) die(char* msg, ...);
void read_conf(char* filename);
struct email {
struct list* headers;
+ char* body;
};
struct action {
/* ham.c */
struct list* current_headers;
+char* current_body;
struct list* make_hlist(void);
void print_headers(struct list* l);
void do_action(struct action* a);
+char* get_body(void);
int curbufsize;
-static char* //TODO: rewrite
-buf_double(char* buf, int size)
-{
- buf = realloc(buf, 2*size);
-
- if (!buf)
- die("Low memory");
-
- return buf;
-
-}
-
static void
new_header(char* buf, struct list* h)
{
if (c == '\r')
continue;
- if (i >= curbufsize-2){
- buf = buf_double(buf, curbufsize);
- curbufsize *= 2;
- }
-
+ if (i >= curbufsize-2)
+ buf = xrealloc(buf, curbufsize *= 2);
+
buf[i++] = c;
if (c == '\n'){
if (last == '\n')
break;
- if ((c = getchar())!=' ' && c!='\t'){
+ if ((c = getchar()) != ' ' && c != '\t'){
if (c != EOF)
ungetc(c, stdin);
buf[i] = 0;
return l;
}
+char*
+get_body(void)
+{
+ char* buf;
+ int c;
+ int i = 0;
+ int curbufsize = BUFSIZE;
+
+ buf = xmalloc(BUFSIZE);
+ while ((c = getchar()) != EOF){
+ buf[i++] = c;
+
+ if (i >= curbufsize - 1)
+ buf = xrealloc(buf, curbufsize *= 2);
+ }
+
+ buf[i] = 0;
+
+ return buf;
+}
+
void
print_headers(struct list* l)
{
void
do_action(struct action* a)
{
- puts("--do action--");
- if (a->l)
- puts(a->l);
- printf("->");
- if (a->r)
- puts(a->r);
- putchar(' ');
- if (a->s)
- puts(a->s);
- puts("with email\n");
- print_headers(a->e.headers);
- puts("\n--Muhehehechlemst!--\n");
+ //just deliver e-mail, do not look at left side now
+/* if (! a->r ){
+
+ } else if (!strcmp(a->r,"pipe")){
+ 1;
+ }
+*/
+
}
struct variable *p;
n = get_bucket_number(name);
- int nocase = !isupper(*name);
+ int nocase = isupper(*name);
LIST_FOREACH(p, hash + n)
if (!(nocase ? strcasecmp : strcmp)(p->name,name)){
if (value){
modify_headers(current_headers, hash);
a->e.headers = copy_headers(current_headers);
+ a->e.body = xstrdup(current_body);
a->l = l;
a->r = r;
a->s = s;
return ret;
}
+void*
+xrealloc(void* buf, size_t size)
+{
+ buf = realloc(buf, size);
+
+ if (!buf)
+ die("Low memory");
+
+ return buf;
+}
+
static void __attribute__ ((noreturn))
parse_err(char* msg, ...)
{