]> git.lizzy.rs Git - plan9front.git/blob - sys/src/boot/bitsy/lib.h
kernel: avoid selecting the boot process in killbig()
[plan9front.git] / sys / src / boot / bitsy / lib.h
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  char    *strrchr(char*, char);
20 extern  int     strcmp(char*, char*);
21 extern  char    *strcpy(char*, char*);
22 extern  char    *strncat(char*, char*, long);
23 extern  char    *strncpy(char*, char*, long);
24 extern  int     strncmp(char*, char*, long);
25 extern  long    strlen(char*);
26 extern  char*   strstr(char*, char*);
27 extern  int     atoi(char*);
28
29 enum
30 {
31         UTFmax          = 3,    /* maximum bytes per rune */
32         Runesync        = 0x80, /* cannot represent part of a UTF sequence */
33         Runeself        = 0x80, /* rune and UTF sequences are the same (<) */
34         Runeerror       = 0x80, /* decoding error in UTF */
35 };
36
37 /*
38  * rune routines
39  */
40 extern  int     runetochar(char*, Rune*);
41 extern  int     chartorune(Rune*, char*);
42 extern  char*   utfrune(char*, long);
43 extern  int     utflen(char*);
44 extern  int     runelen(long);
45
46 extern  int     abs(int);
47
48 /*
49  * print routines
50  */
51 typedef struct Cconv Fconv;
52 extern  char*   donprint(char*, char*, char*, void*);
53 extern  int     sprint(char*, char*, ...);
54 extern  char*   seprint(char*, char*, char*, ...);
55 extern  int     snprint(char*, int, char*, ...);
56 extern  int     print(char*, ...);
57
58 /*
59  * one-of-a-kind
60  */
61 extern  char*   cleanname(char*);
62 extern  uintptr getcallerpc(void*);
63 extern  long    strtol(char*, char**, int);
64 extern  ulong   strtoul(char*, char**, int);
65 extern  vlong   strtoll(char*, char**, int);
66 extern  uvlong  strtoull(char*, char**, int);
67 extern  char    etext[];
68 extern  char    edata[];
69 extern  char    end[];
70 extern  int     getfields(char*, char**, int, int, char*);
71
72 /*
73  * Syscall data structures
74  */
75 #define MORDER  0x0003  /* mask for bits defining order of mounting */
76 #define MREPL   0x0000  /* mount replaces object */
77 #define MBEFORE 0x0001  /* mount goes before others in union directory */
78 #define MAFTER  0x0002  /* mount goes after others in union directory */
79 #define MCREATE 0x0004  /* permit creation in mounted directory */
80 #define MCACHE  0x0010  /* cache some data */
81 #define MMASK   0x001F  /* all bits on */
82
83 #define OREAD   0       /* open for read */
84 #define OWRITE  1       /* write */
85 #define ORDWR   2       /* read and write */
86 #define OEXEC   3       /* execute, == read but check execute permission */
87 #define OTRUNC  16      /* or'ed in (except for exec), truncate file first */
88 #define OCEXEC  32      /* or'ed in, close on exec */
89 #define ORCLOSE 64      /* or'ed in, remove on close */
90
91 #define NCONT   0       /* continue after note */
92 #define NDFLT   1       /* terminate after note */
93 #define NSAVE   2       /* clear note but hold state */
94 #define NRSTR   3       /* restore saved state */
95
96 typedef struct Qid      Qid;
97 typedef struct Dir      Dir;
98 typedef struct Waitmsg  Waitmsg;
99
100 #define ERRLEN          64
101 #define DIRLEN          116
102 #define NAMELEN         28
103
104 struct Qid
105 {
106         ulong   path;
107         ulong   vers;
108 };
109
110 struct Dir
111 {
112         char    name[NAMELEN];
113         char    uid[NAMELEN];
114         char    gid[NAMELEN];
115         Qid     qid;
116         ulong   mode;
117         long    atime;
118         long    mtime;
119         vlong   length;
120         short   type;
121         short   dev;
122 };
123
124 struct Waitmsg
125 {
126         char    pid[12];        /* of loved one */
127         char    time[3*12];     /* of loved one and descendants */
128         char    msg[ERRLEN];
129 };
130
131 /*
132  *  locks
133  */
134 typedef
135 struct Lock {
136         int     val;
137 } Lock;
138
139 extern int      _tas(int*);
140
141 extern  void    lock(Lock*);
142 extern  void    unlock(Lock*);
143 extern  int     canlock(Lock*);