dat.h 988 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. typedef struct Msg Msg;
  2. struct Msg
  3. {
  4. Msg *link;
  5. uchar *rp;
  6. uchar *ep;
  7. };
  8. typedef struct Client Client;
  9. struct Client
  10. {
  11. int moribund;
  12. int activethread;
  13. int num;
  14. int ref;
  15. int status;
  16. int pid;
  17. char *cmd;
  18. int fd[2];
  19. char err[ERRMAX];
  20. Req *execreq;
  21. Channel *execpid;
  22. Req *rq, **erq; /* reading */
  23. Msg *mq, **emq;
  24. Ioproc *readerproc;
  25. Channel *writerkick;
  26. Req *wq, **ewq; /* writing */
  27. Req *curw; /* currently writing */
  28. Ioproc *writerproc; /* writing */
  29. };
  30. extern int nclient;
  31. extern Client **client;
  32. extern void dataread(Req*, Client*);
  33. extern int newclient(void);
  34. extern void closeclient(Client*);
  35. extern void datawrite(Req*, Client*);
  36. extern void ctlwrite(Req*, Client*);
  37. extern void clientflush(Req*, Client*);
  38. #define emalloc emalloc9p
  39. #define estrdup estrdup9p
  40. #define erealloc erealloc9p
  41. extern Srv fs;
  42. extern void initfs(void);
  43. extern void setexecname(char*);
  44. enum
  45. {
  46. STACK = 8192,
  47. };
  48. enum /* Client.status */
  49. {
  50. Closed,
  51. Exec,
  52. Established,
  53. Hangup,
  54. };