89 lines · 2.4 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #include "sys.h" /* format of REMOTE FROM lines */extern char *REMFROMRE;extern int REMSENDERMATCH;extern int REMDATEMATCH;extern int REMSYSMATCH; /* format of mailbox FROM lines */#define IS_HEADER(p) ((p)[0]=='F'&&(p)[1]=='r'&&(p)[2]=='o'&&(p)[3]=='m'&&(p)[4]==' ')#define IS_TRAILER(p) ((p)[0]=='m'&&(p)[1]=='o'&&(p)[2]=='r'&&(p)[3]=='F'&&(p)[4]=='\n')extern char *FROMRE;extern int SENDERMATCH;extern int DATEMATCH; enum{	Elemlen= 28,	Errlen=	ERRMAX,	Pathlen= 256,};enum { Atnoteunknown, Atnoterecog }; /* *  routines in mail.c */extern int	print_header(Biobuf*, char*, char*);extern int	print_remote_header(Biobuf*, char*, char*, char*);extern int	parse_header(char*, String*, String*); /* *  routines in aux.c */extern String	*abspath(char*, char*, String*);extern String	*mboxpath(char*, char*, String*, int);extern char	*basename(char*);extern int	delivery_status(String*);extern void	append_match(Resub*, String*, int);extern int	shellchars(char*);extern String*	escapespecial(String*);extern String*	unescapespecial(String*);extern int	returnable(char*); /* in copymessage */extern int	appendfiletombox(int, int);extern int	appendfiletofile(int, int); /* mailbox types */#define MF_NORMAL 0#define MF_PIPE 1#define MF_FORWARD 2#define MF_NOMBOX 3#define MF_NOTMBOX 4 /* a pipe between parent and child*/typedef struct {	Biobuf	bb;	Biobuf	*fp;	/* parent process end*/	int	fd;	/* child process end*/} stream; /* a child process*/typedef struct process{	stream	*std[3];	/* standard fd's*/	int	pid;		/* process identifier*/	int	status;		/* exit status*/	Waitmsg	*waitmsg;} process; extern stream	*instream(void);extern stream	*outstream(void);extern void	stream_free(stream*);extern process	*noshell_proc_start(char**, stream*, stream*, stream*, int, char*);extern process	*proc_start(char*, stream*, stream*, stream*, int, char*);extern int	proc_wait(process*);extern int	proc_free(process*);extern int	proc_kill(process*); /* tell compiler we're using a value so it won't complain */#define USE(x)	if(x)