xref: /plan9-contrib/sys/src/boot/vt5/libc.h (revision 98a68993d685eb89080b5d73dba0a8f0a226848c)
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 #define assert(x)	if(x){}else _assert("x")
7 
8 /*
9  * mem routines
10  */
11 extern void* memset(void*, int, ulong);
12 extern int memcmp(void*, void*, ulong);
13 extern void* memmove(void*, void*, ulong);
14 
15 /*
16  * string routines
17  */
18 extern int cistrcmp(char *, char *);
19 extern int cistrncmp(char *, char *, int);
20 extern char *strchr(char *, int);
21 extern int strcmp(char *, char *);
22 extern char* strecpy(char*, char*, char*);
23 extern long strlen(char*);
24 extern int strncmp(char *, char *, int);
25 extern char* strncpy(char*, char*, long);
26 extern char* strstr(char *, char *);
27 extern int tokenize(char*, char**, int);
28 
29 /*
30  * malloc
31  */
32 extern void free(void*);
33 extern void* malloc(ulong);
34 extern void* mallocalign(ulong, ulong, long, ulong);
35 extern int mallocinit(void*, ulong);
36 
37 /*
38  * print routines
39  */
40 typedef struct Fmt Fmt;
41 struct Fmt {
42 	uchar	runes;			/* output buffer is runes or chars? */
43 	void*	start;			/* of buffer */
44 	void*	to;			/* current place in the buffer */
45 	void*	stop;			/* end of the buffer; overwritten if flush fails */
46 	int	(*flush)(Fmt*);		/* called when to == stop */
47 	void*	farg;			/* to make flush a closure */
48 	int	nfmt;			/* num chars formatted so far */
49 	va_list	args;			/* args passed to dofmt */
50 	int	r;			/* % format Rune */
51 	int	width;
52 	int	prec;
53 	ulong	flags;
54 };
55 
56 extern int print(char*, ...);
57 extern char* seprint(char*, char*, char*, ...);
58 extern char* vseprint(char*, char*, char*, va_list);
59 
60 #pragma	varargck	argpos	print		1
61 #pragma	varargck	argpos	seprint		3
62 
63 #pragma	varargck	type	"lld"	vlong
64 #pragma	varargck	type	"llx"	vlong
65 #pragma	varargck	type	"lld"	uvlong
66 #pragma	varargck	type	"llx"	uvlong
67 #pragma	varargck	type	"ld"	long
68 #pragma	varargck	type	"lx"	long
69 #pragma	varargck	type	"ld"	ulong
70 #pragma	varargck	type	"lx"	ulong
71 #pragma	varargck	type	"d"	int
72 #pragma	varargck	type	"x"	int
73 #pragma	varargck	type	"c"	int
74 #pragma	varargck	type	"C"	int
75 #pragma	varargck	type	"d"	uint
76 #pragma	varargck	type	"x"	uint
77 #pragma	varargck	type	"c"	uint
78 #pragma	varargck	type	"C"	uint
79 #pragma	varargck	type	"s"	char*
80 #pragma	varargck	type	"q"	char*
81 #pragma	varargck	type	"S"	Rune*
82 #pragma	varargck	type	"%"	void
83 #pragma	varargck	type	"p"	uintptr
84 #pragma	varargck	type	"p"	void*
85 #pragma	varargck	flag	','
86 #pragma	varargck	type	"E"	uchar*	/* eipfmt */
87 #pragma	varargck	type	"V"	uchar*	/* eipfmt */
88 
89 extern int fmtinstall(int, int (*)(Fmt*));
90 extern int dofmt(Fmt*, char*);
91 
92 /*
93  * one-of-a-kind
94  */
95 extern void _assert(char*);
96 extern uintptr getcallerpc(void*);
97 extern long strtol(char*, char**, int);
98 extern ulong strtoul(char*, char**, int);
99 extern	void	longjmp(jmp_buf, int);
100 extern	int	setjmp(jmp_buf);
101 
102 extern char etext[], edata[], end[];
103