|
|
researchv10 Norman
/*
* remote file access library
* for building file system daemons
*/
typedef struct {
char *fs; /* fs-specific local data */
long ino;
char dev;
char type; /* directory or regular */
short mode;
short nlink;
short uid, gid;
short rdev; /* is this useful? */
long size;
long ta;
long tm;
long tc;
} Rfile;
extern int fserrno;
extern int rfdebug;
extern char *rfclient;
/*
* service routines
* provided by the user,
* but this is what they should look like
*/
Rfile *fsinit(); /* (int argc, char **argv) */
Rfile *fswalk(); /* (Rfile *dir, char *name) */
Rfile *fscreate(); /* (Rfile *dir, char *newname, int mode, uid, gid) */
int fsdelete(); /* (Rfile *dir, char *name) */
int fslink(); /* (Rfile *dir, char *newname, Rfile *ofile) */
int fsmkdir(); /* (Rfile *dir, char *name) */
int fsrmdir(); /* (Rfile *dir, char *name, int mode, uid, gid) */
int fsdone(); /* (Rfile *f) -- discard this Rfile */
int fsstat(); /* (Rfile *f) -- fill it in with stat info */
int fsread(); /* (Rfile *f, long off, char *buf, int len) */
int fswrite(); /* (Rfile *f, long off, char *buf, int len) */
int fsdirread(); /* (Rfile *f, long off, char *buf, int len, long *newoff) */
int fsupdate(); /* (Rfile *f, Rfile *attr) -- copy attributes from attr */
/* mode, size, uid, gid, ta, tm */
/*
* permission mapping
*/
/*
* local name to local ID mapping
*/
typedef struct {
char name[9];
short id;
} Idmap;
/*
* local name to remote name mapping;
* used only for exception list
*/
typedef struct {
char sname[9];
char cname[9];
int sid;
} Namemap;
Idmap *rfmkidmap(); /* (char *filename, Namemap *exlist) */
extern Idmap *rfuidmap, *rfgidmap;
extern int rfuid, rfgid;
extern int rfotherdeny;
#define RFNOID (-1) /* unmapped user- or group-id */
/*
* file modes
* these correspond to V7 Unix
* only the low nine bits (permissions) are used by the library
* other bits will be passed literally to the client
* if it expects unix-like modes
*/
#define RFPRD 04 /* read permission */
#define RFPWR 02 /* write permission */
#define RFPEX 01 /* execute permission */
#define RFPDS RFPEX /* directory search permission */
#define RFPOTHER 0 /* shift to make `other' permissions */
#define RFPGROUP 3 /* shift to make `group' permissions */
#define RFPOWNER 6 /* shift to make `owner' permissions */
/*
* file types
* other types are just not allowed for now
* (but some protocols may sneak them through in the mode)
*/
#define RFTREG 0 /* regular file */
#define RFTDIR 1 /* directory */
/*
* error codes in fserrno
* these intentionally match Unix errno values,
* and in fact errno values will usually do,
* but the library doesn't promise to preserve
* exact values that aren't here
*/
#define RFEOWNER 1 /* not file owner */
#define RFENOENT 2 /* no such file or directory */
#define RFEIO 5 /* general I/O error */
#define RFENXIO 6 /* no such file address */
#define RFEACCES 13 /* no permission */
#define RFEBUSY 16 /* something is in use and can't be used again */
#define RFEEXIST 17 /* file exists when it shouldn't */
#define RFEXDEV 18 /* link across devices (or just not allowed) */
#define RFENOTDIR 20 /* not a directory and should be */
#define RFEISDIR 21 /* is a directory and shouldn't be */
#define RFEINVAL 22 /* invalid arg or function; catchall for internal errors */
#define RFENOSPC 28 /* no space on disk or in buffer (dirread) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.