Logo Search packages:      
Sourcecode: 9base version File versions  Download package

fcall.h

#ifndef _FCALL_H_
#define _FCALL_H_ 1
#ifdef __cplusplus
extern "C" {
#endif
/*
#pragma     src   "/sys/src/libc/9sys"
#pragma     lib   "libc.a"
*/

#define     VERSION9P   "9P2000"
#define     MAXWELEM    16

typedef
struct      Fcall
{
      uchar type;
      u32int      fid;
      ushort      tag;
      u32int      msize;            /* Tversion, Rversion */
      char  *version;   /* Tversion, Rversion */
      ushort      oldtag;           /* Tflush */
      char  *ename;           /* Rerror */
      Qid   qid;        /* Rattach, Ropen, Rcreate */
      u32int      iounit;           /* Ropen, Rcreate */
      Qid   aqid;       /* Rauth */
      u32int      afid;       /* Tauth, Tattach */
      char  *uname;           /* Tauth, Tattach */
      char  *aname;           /* Tauth, Tattach */
      u32int      perm;       /* Tcreate */ 
      char  *name;            /* Tcreate */
      uchar mode;       /* Tcreate, Topen */
      u32int      newfid;           /* Twalk */
      ushort      nwname;           /* Twalk */
      char  *wname[MAXWELEM]; /* Twalk */
      ushort      nwqid;            /* Rwalk */
      Qid   wqid[MAXWELEM];         /* Rwalk */
      vlong offset;           /* Tread, Twrite */
      u32int      count;            /* Tread, Twrite, Rread */
      char  *data;            /* Twrite, Rread */
      ushort      nstat;            /* Twstat, Rstat */
      uchar *stat;            /* Twstat, Rstat */
      int   unixfd;           /* Ropenfd */
} Fcall;


#define     GBIT8(p)    ((p)[0])
#define     GBIT16(p)   ((p)[0]|((p)[1]<<8))
#define     GBIT32(p)   ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
#define     GBIT64(p)   ((vlong)((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24)) |\
                        ((vlong)((p)[4]|((p)[5]<<8)|((p)[6]<<16)|((p)[7]<<24)) << 32))

#define     PBIT8(p,v)  (p)[0]=(v)
#define     PBIT16(p,v) (p)[0]=(v);(p)[1]=(v)>>8
#define     PBIT32(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24
#define     PBIT64(p,v) (p)[0]=(v);(p)[1]=(v)>>8;(p)[2]=(v)>>16;(p)[3]=(v)>>24;\
                  (p)[4]=(v)>>32;(p)[5]=(v)>>40;(p)[6]=(v)>>48;(p)[7]=(v)>>56

#define     BIT8SZ            1
#define     BIT16SZ           2
#define     BIT32SZ           4
#define     BIT64SZ           8
#define     QIDSZ (BIT8SZ+BIT32SZ+BIT64SZ)

/* STATFIXLEN includes leading 16-bit count */
/* The count, however, excludes itself; total size is BIT16SZ+count */
#define STATFIXLEN      (BIT16SZ+QIDSZ+5*BIT16SZ+4*BIT32SZ+1*BIT64SZ)   /* amount of fixed length data in a stat buffer */

#define     NOTAG       (ushort)~0U /* Dummy tag */
#define     NOFID       (u32int)~0U /* Dummy fid */
#define     IOHDRSZ           24    /* ample room for Twrite/Rread header (iounit) */

enum
{
      Tversion =  100,
      Rversion,
      Tauth =           102,
      Rauth,
      Tattach =   104,
      Rattach,
      Terror =    106,  /* illegal */
      Rerror,
      Tflush =    108,
      Rflush,
      Twalk =           110,
      Rwalk,
      Topen =           112,
      Ropen,
      Tcreate =   114,
      Rcreate,
      Tread =           116,
      Rread,
      Twrite =    118,
      Rwrite,
      Tclunk =    120,
      Rclunk,
      Tremove =   122,
      Rremove,
      Tstat =           124,
      Rstat,
      Twstat =    126,
      Rwstat,
      Tmax,

      Topenfd =   98,
      Ropenfd,
};

uint  convM2S(uchar*, uint, Fcall*);
uint  convS2M(Fcall*, uchar*, uint);
uint  sizeS2M(Fcall*);

int   statcheck(uchar *abuf, uint nbuf);
uint  convM2D(uchar*, uint, Dir*, char*);
uint  convD2M(Dir*, uchar*, uint);
uint  sizeD2M(Dir*);

int   fcallfmt(Fmt*);
int   dirfmt(Fmt*);
int   dirmodefmt(Fmt*);

int   read9pmsg(int, void*, uint);

/*
#pragma     varargck    type  "F"   Fcall*
#pragma     varargck    type  "M"   ulong
#pragma     varargck    type  "D"   Dir*
*/

#ifdef __cplusplus
}
#endif
#endif

Generated by  Doxygen 1.6.0   Back to index