xref: /inferno-os/os/boot/puma/lib.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1 /*
2  * functions (possibly) linked in, complete, from libc.
3  */
4 
5 /*
6  * mem routines
7  */
8 extern	void*	memccpy(void*, void*, int, long);
9 extern	void*	memset(void*, int, long);
10 extern	int	memcmp(void*, void*, long);
11 extern	void*	memmove(void*, void*, long);
12 extern	void*	memchr(void*, int, long);
13 
14 /*
15  * string routines
16  */
17 extern	char*	strcat(char*, char*);
18 extern	char*	strchr(char*, char);
19 extern	int	strcmp(char*, char*);
20 extern	char*	strcpy(char*, char*);
21 extern	char*	strncat(char*, char*, long);
22 extern	char*	strncpy(char*, char*, long);
23 extern	int	strncmp(char*, char*, long);
24 extern	long	strlen(char*);
25 extern	char*	strrchr(char*, char);
26 extern	char*	strstr(char*, char*);
27 
28 /*
29  * print routines
30  * 	Fconv isn't used but is defined to satisfy prototypes in libg.h
31  *	that are never called.
32  */
33 typedef	struct Fconv Fconv;
34 
35 extern	char*	donprint(char*, char*, char*, void*);
36 extern	int	sprint(char*, char*, ...);
37 extern	int	print(char*, ...);
38 
39 #define	PRINTSIZE	256
40 
41 /*
42  * one-of-a-kind
43  */
44 extern	int	atoi(char*);
45 extern	long	strtol(char*, char**, int);
46 extern	ulong	strtoul(char*, char**, int);
47 extern	char	end[];
48 extern 	char edata[];
49 
50 /*
51  * Syscall data structures
52  */
53 
54 #define	MORDER	0x0003	/* mask for bits defining order of mounting */
55 #define	MREPL	0x0000	/* mount replaces object */
56 #define	MBEFORE	0x0001	/* mount goes before others in union directory */
57 #define	MAFTER	0x0002	/* mount goes after others in union directory */
58 #define	MCREATE	0x0004	/* permit creation in mounted directory */
59 #define	MMASK	0x0007	/* all bits on */
60 
61 #define	OREAD	0	/* open for read */
62 #define	OWRITE	1	/* write */
63 #define	ORDWR	2	/* read and write */
64 #define	OEXEC	3	/* execute, == read but check execute permission */
65 #define	OTRUNC	16	/* or'ed in (except for exec), truncate file first */
66 #define	OCEXEC	32	/* or'ed in, close on exec */
67 #define	ORCLOSE	64	/* or'ed in, remove on close */
68 
69 #define	NCONT	0	/* continue after note */
70 #define	NDFLT	1	/* terminate after note */
71 
72 typedef struct Qid	Qid;
73 typedef struct Dir	Dir;
74 typedef struct Waitmsg	Waitmsg;
75 
76 #define	ERRLEN	64
77 #define	DIRLEN	116
78 #define	NAMELEN	28
79 
80 struct Qid
81 {
82 	ulong	path;
83 	ulong	vers;
84 };
85 
86 struct Dir
87 {
88 	char	name[NAMELEN];
89 	char	uid[NAMELEN];
90 	char	gid[NAMELEN];
91 	Qid	qid;
92 	ulong	mode;
93 	long	atime;
94 	long	mtime;
95 	ulong	length;
96 	short	type;
97 	short	dev;
98 };
99 
100 struct Waitmsg
101 {
102 	int	pid;		/* of loved one */
103 	int	status;		/* unused; a placeholder */
104 	ulong	time[3];	/* of loved one */
105 	char	msg[ERRLEN];
106 };
107 #define	nelem(x)	(sizeof(x)/sizeof((x)[0]))
108