64 lines
988 B
C
64 lines
988 B
C
typedef struct Msg Msg;
|
|
struct Msg
|
|
{
|
|
Msg *link;
|
|
uchar *rp;
|
|
uchar *ep;
|
|
};
|
|
|
|
typedef struct Client Client;
|
|
struct Client
|
|
{
|
|
int moribund;
|
|
int activethread;
|
|
int num;
|
|
int ref;
|
|
int status;
|
|
int pid;
|
|
char *cmd;
|
|
int fd[2];
|
|
char err[ERRMAX];
|
|
|
|
Req *execreq;
|
|
Channel *execpid;
|
|
|
|
Req *rq, **erq; /* reading */
|
|
Msg *mq, **emq;
|
|
Ioproc *readerproc;
|
|
|
|
Channel *writerkick;
|
|
Req *wq, **ewq; /* writing */
|
|
Req *curw; /* currently writing */
|
|
Ioproc *writerproc; /* writing */
|
|
};
|
|
extern int nclient;
|
|
extern Client **client;
|
|
extern void dataread(Req*, Client*);
|
|
extern int newclient(void);
|
|
extern void closeclient(Client*);
|
|
extern void datawrite(Req*, Client*);
|
|
extern void ctlwrite(Req*, Client*);
|
|
extern void clientflush(Req*, Client*);
|
|
|
|
#define emalloc emalloc9p
|
|
#define estrdup estrdup9p
|
|
#define erealloc erealloc9p
|
|
|
|
extern Srv fs;
|
|
extern void initfs(void);
|
|
extern void setexecname(char*);
|
|
|
|
enum
|
|
{
|
|
STACK = 8192,
|
|
};
|
|
|
|
enum /* Client.status */
|
|
{
|
|
Closed,
|
|
Exec,
|
|
Established,
|
|
Hangup,
|
|
};
|
|
|