lib.h - vx32 - Local 9vx git repository for patches.
(HTM) git clone git://r-36.net/vx32
(DIR) Log
(DIR) Files
(DIR) Refs
---
lib.h (3824B)
---
1 /*
2 * functions (possibly) linked in, complete, from libc.
3 */
4 #define nelem(x) (sizeof(x)/sizeof((x)[0]))
5 #define offsetof(s, m) (ulong)(&(((s*)0)->m))
6
7 /*
8 * mem routines
9 */
10
11 /*
12 * string routines
13 */
14 extern char* strecpy(char*, char*, char*);
15
16
17
18 /*
19 * one-of-a-kind
20 */
21 extern char* cleanname(char*);
22 extern ulong getcallerpc(void*);
23
24 extern int getfields(char*, char**, int, int, char*);
25 extern int gettokens(char *, char **, int , char *);
26 extern int tokenize(char*, char**, int);
27 extern int dec64(uchar*, int, char*, int);
28
29 /*
30 * Syscall data structures
31 */
32 #define MORDER 0x0003 /* mask for bits defining order of mounting */
33 #define MREPL 0x0000 /* mount replaces object */
34 #define MBEFORE 0x0001 /* mount goes before others in union directory */
35 #define MAFTER 0x0002 /* mount goes after others in union directory */
36 #define MCREATE 0x0004 /* permit creation in mounted directory */
37 #define MCACHE 0x0010 /* cache some data */
38 #define MMASK 0x0017 /* all bits on */
39
40 #define OREAD 0 /* open for read */
41 #define OWRITE 1 /* write */
42 #define ORDWR 2 /* read and write */
43 #define OEXEC 3 /* execute, == read but check execute permission */
44 #define OTRUNC 16 /* or'ed in (except for exec), truncate file first */
45 #define OCEXEC 32 /* or'ed in, close on exec */
46 #define ORCLOSE 64 /* or'ed in, remove on close */
47 #define OEXCL 0x1000 /* or'ed in, exclusive create */
48
49 #define NCONT 0 /* continue after note */
50 #define NDFLT 1 /* terminate after note */
51 #define NSAVE 2 /* clear note but hold state */
52 #define NRSTR 3 /* restore saved state */
53
54 typedef struct Qid Qid;
55 typedef struct Dir Dir;
56 typedef struct OWaitmsg OWaitmsg;
57 typedef struct Waitmsg Waitmsg;
58
59 #define ERRMAX 128 /* max length of error string */
60 #define KNAMELEN 28 /* max length of name held in kernel */
61
62 /* bits in Qid.type */
63 #define QTDIR 0x80 /* type bit for directories */
64 #define QTAPPEND 0x40 /* type bit for append only files */
65 #define QTEXCL 0x20 /* type bit for exclusive use files */
66 #define QTMOUNT 0x10 /* type bit for mounted channel */
67 #define QTAUTH 0x08 /* type bit for authentication file */
68 #define QTFILE 0x00 /* plain file */
69
70 /* bits in Dir.mode */
71 #define DMDIR 0x80000000 /* mode bit for directories */
72 #define DMAPPEND 0x40000000 /* mode bit for append only files */
73 #define DMEXCL 0x20000000 /* mode bit for exclusive use files */
74 #define DMMOUNT 0x10000000 /* mode bit for mounted channel */
75 #define DMREAD 0x4 /* mode bit for read permission */
76 #define DMWRITE 0x2 /* mode bit for write permission */
77 #define DMEXEC 0x1 /* mode bit for execute permission */
78
79 struct Qid
80 {
81 uvlong path;
82 ulong vers;
83 uchar type;
84 };
85
86 struct Dir {
87 /* system-modified data */
88 ushort type; /* server type */
89 uint dev; /* server subtype */
90 /* file data */
91 Qid qid; /* unique id from server */
92 ulong mode; /* permissions */
93 ulong atime; /* last read time */
94 ulong mtime; /* last write time */
95 vlong length; /* file length: see <u.h> */
96 char *name; /* last element of path */
97 char *uid; /* owner name */
98 char *gid; /* group name */
99 char *muid; /* last modifier name */
100 };
101
102 struct OWaitmsg
103 {
104 char pid[12]; /* of loved one */
105 char time[3*12]; /* of loved one and descendants */
106 char msg[64]; /* compatibility BUG */
107 };
108
109 struct Waitmsg
110 {
111 int pid; /* of loved one */
112 ulong time[3]; /* of loved one and descendants */
113 char msg[ERRMAX]; /* actually variable-size in user mode */
114 };
115
116 #include "utf.h"
117 #include "fmt.h"
118
119 extern int dec64(uchar*, int, char*, int);
120 extern int enc64(char*, int, uchar*, int);
121 extern int dec32(uchar*, int, char*, int);
122 extern int enc32(char*, int, uchar*, int);
123 extern int dec16(uchar*, int, char*, int);
124 extern int enc16(char*, int, uchar*, int);
125 extern int encodefmt(Fmt*);
126 extern int fmtstrcpy(Fmt*, char*);
127
128 extern void* mallocz(ulong, int);
129 extern void werrstr(char*, ...);
130