Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

typedef struct Ioclust  Ioclust;
typedef struct Iobuf    Iobuf;
typedef struct Isofile  Isofile;
typedef struct Xdata    Xdata;
typedef struct Xfile    Xfile;
typedef struct Xfs      Xfs;
typedef struct Xfsub    Xfsub;

#pragma incomplete Isofile

enum
{
        Sectorsize = 2048,
        Maxname = 256,
};

struct Iobuf
{
        Ioclust* clust;
        long    addr;
        uchar*  iobuf;
};

struct Ioclust
{
        long    addr;                   /* in sectors; good to 8TB */
        Xdata*  dev;
        Ioclust* next;
        Ioclust* prev;
        int     busy;
        int     nbuf;
        Iobuf*  buf;
        uchar*  iobuf;
};

struct Xdata
{
        Xdata*  next;
        char*   name;           /* of underlying file */
        Qid     qid;
        short   type;
        short   fdev;
        int     ref;            /* attach count */
        int     dev;            /* for read/write */
};

struct Xfsub
{
        void    (*reset)(void);
        int     (*attach)(Xfile*);
        void    (*clone)(Xfile*, Xfile*);
        void    (*walkup)(Xfile*);
        void    (*walk)(Xfile*, char*);
        void    (*open)(Xfile*, int);
        void    (*create)(Xfile*, char*, long, int);
        long    (*readdir)(Xfile*, uchar*, long, long);
        long    (*read)(Xfile*, char*, vlong, long);
        long    (*write)(Xfile*, char*, vlong, long);
        void    (*clunk)(Xfile*);
        void    (*remove)(Xfile*);
        void    (*stat)(Xfile*, Dir*);
        void    (*wstat)(Xfile*, Dir*);
};

struct Xfs
{
        Xdata*  d;              /* how to get the bits */
        Xfsub*  s;              /* how to use them */
        int     ref;
        int     issusp; /* follows system use sharing protocol */
        long    suspoff;        /* if so, offset at which SUSP area begins */
        int     isrock; /* Rock Ridge format */
        int     isplan9;        /* has Plan 9-specific directory info */
        Qid     rootqid;
        Isofile*        ptr;            /* private data */
};

struct Xfile
{
        Xfile*  next;           /* in fid hash bucket */
        Xfs*    xf;
        long    fid;
        ulong   flags;
        Qid     qid;
        int     len;            /* of private data */
        Isofile*        ptr;
};

enum
{
        Asis,
        Clean,
        Clunk
};

enum
{
        Oread = 1,
        Owrite = 2,
        Orclose = 4,
        Omodes = 3,
};

extern char     Enonexist[];    /* file does not exist */
extern char     Eperm[];        /* permission denied */
extern char     Enofile[];      /* no file system specified */
extern char     Eauth[];        /* authentication failed */

extern char     *srvname;
extern char     *deffile;
extern int      chatty;
extern jmp_buf  err_lab[];
extern int      nerr_lab;
extern char     err_msg[];

extern int nojoliet;
extern int noplan9;
extern int norock;