Blob


1 #include "sys.h"
3 /* format of REMOTE FROM lines */
4 extern char *REMFROMRE;
5 extern int REMSENDERMATCH;
6 extern int REMDATEMATCH;
7 extern int REMSYSMATCH;
9 /* format of mailbox FROM lines */
10 #define IS_HEADER(p) ((p)[0]=='F'&&(p)[1]=='r'&&(p)[2]=='o'&&(p)[3]=='m'&&(p)[4]==' ')
11 #define IS_TRAILER(p) ((p)[0]=='m'&&(p)[1]=='o'&&(p)[2]=='r'&&(p)[3]=='F'&&(p)[4]=='\n')
12 extern char *FROMRE;
13 extern int SENDERMATCH;
14 extern int DATEMATCH;
16 enum
17 {
18 Elemlen= 28,
19 Errlen= 128,
20 Pathlen= 256,
22 RetryCode = 2
23 };
25 /*
26 * routines in mail.c
27 */
28 extern int print_header(Biobuf*, char*, char*);
29 extern int print_remote_header(Biobuf*, char*, char*, char*);
30 extern int parse_header(char*, String*, String*);
32 /*
33 * routines in aux.c
34 */
35 extern String *abspath(char*, char*, String*);
36 extern String *mboxpath(char*, char*, String*, int);
37 extern char *basename(char*);
38 extern int delivery_status(String*);
39 extern void append_match(Resub*, String*, int);
40 extern int shellchars(char*);
41 extern String* escapespecial(String*);
42 extern String* unescapespecial(String*);
43 extern int returnable(char*);
45 /* in copymessage */
46 extern int appendfiletombox(int, int);
47 extern int appendfiletofile(int, int);
49 /* mailbox types */
50 #define MF_NORMAL 0
51 #define MF_PIPE 1
52 #define MF_FORWARD 2
53 #define MF_NOMBOX 3
54 #define MF_NOTMBOX 4
56 /* a pipe between parent and child*/
57 typedef struct {
58 Biobuf bb;
59 Biobuf *fp; /* parent process end*/
60 int fd; /* child process end*/
61 } stream;
63 /* a child process*/
64 typedef struct process{
65 stream *std[3]; /* standard fd's*/
66 int pid; /* process identifier*/
67 int status; /* exit status*/
68 Waitmsg *waitmsg;
69 } process;
71 extern stream *instream(void);
72 extern stream *outstream(void);
73 extern void stream_free(stream*);
74 extern process *noshell_proc_start(char**, stream*, stream*, stream*, int, char*);
75 extern process *proc_start(char*, stream*, stream*, stream*, int, char*);
76 extern int proc_wait(process*);
77 extern int proc_free(process*);
78 extern int proc_kill(process*);