Another round at reorganization
[akaros.git] / user / parlib / src / parlib.h
1 /* See COPYRIGHT for copyright information. */
2 /* Kevin Klues <klueska@cs.berkeley.edu>        */
3
4 #ifndef _NEWLIB_LIBC_WRAPPERS_H
5 #define _NEWLIB_LIBC_WRAPPERS_H_
6
7 #include <errno.h>
8 #include <sys/stat.h>
9 #undef errno
10 extern int errno;
11
12 /* _exit()
13  * Exit a program without cleaning up files. 
14  * If your system doesn't provide this, it is best to avoid linking 
15  * with subroutines that require it (exit, system).
16  */
17 void _exit();
18     
19 /* close()
20  * Close a file. 
21  * Minimal implementation.
22  */
23 int close(int file);
24
25 /* execve()
26  * Transfer control to a new process. 
27  * Minimal implementation (for a system without processes).
28  */
29
30 int execve(char *name, char **argv, char **env);
31
32 /* fork()
33  * Create a new process. 
34  * Minimal implementation (for a system without processes).
35  */
36 int fork(void);
37
38 /* fstat()
39  * Status of an open file. 
40  * For consistency with other minimal implementations in these stubs, 
41  * all files are regarded as character special devices. 
42  * The sys/stat.h header file required is distributed in the include 
43  * subdirectory for the newlib C library.
44  */
45 int fstat(int file, struct stat *st);
46
47 /* getpid()
48  * Process-ID; this is sometimes used to generate strings unlikely to 
49  * conflict with other processes. Minimal implementation, for a system 
50  * without processes.
51  */
52 int getpid(void);
53
54 /* isatty()
55  * Query whether output stream is a terminal. 
56  * For consistency with the other minimal implementations, 
57  * which only support output to stdout, this minimal 
58  * implementation is suggested.
59  */
60 int isatty(int file);
61
62 /* kill()
63  * Send a signal. 
64  * Minimal implementation.
65  */
66 int kill(int pid, int sig);
67
68 /* link()
69  * Establish a new name for an existing file. 
70  * Minimal implementation.
71  */
72 int link(char *old, char *new);
73
74 /* lseek()
75  * Set position in a file. 
76  * Minimal implementation.
77  */
78 int lseek(int file, int ptr, int dir);
79
80 /* __sseek64()
81  * Set position in a file. 
82  * Minimal implementation.
83  */
84 int __sseek64(int file, int ptr, int dir);
85
86 /* open()
87  * Open a file. 
88  * Minimal implementation.
89  */
90 int open(const char *name, int flags, int mode);
91
92 /* read()
93  * Read from a file. 
94  * Minimal implementation.
95  */
96 int read(int file, char *ptr, int len);
97
98 /* sbrk()
99  * Increase program data space. 
100  * As malloc and related functions depend on this, it is 
101  * useful to have a working implementation. 
102  * The following suffices for a standalone system; it exploits the 
103  * symbol _end automatically defined by the GNU linker.
104  */
105 caddr_t sbrk(int incr);
106
107 /* stat()
108  * Status of a file (by name). 
109  * Minimal implementation.
110  */
111 int stat(char *file, struct stat *st);
112
113 /* times()
114  * Timing information for current process. 
115  * Minimal implementation.
116  */
117 int times(struct tms *buf);
118
119 /* unlink()
120  * Remove a file's directory entry. 
121  * Minimal implementation.
122  */
123 int unlink(char *name);
124
125 /* wait()
126  * Wait for a child process. 
127  * Minimal implementation.
128  */
129 int wait(int *status);
130
131 /* write()
132  * Write to a file. 
133  * libc subroutines will use this system routine for output 
134  * to all files, including stdout—so if you need to generate 
135  * any output, for example to a serial port for debugging, 
136  * you should make your minimal write capable of doing this. 
137  * The following minimal implementation is an incomplete example; 
138  * it relies on a outbyte subroutine (not shown; typically, you must 
139  * write this in assembler from examples provided by your hardware 
140  * manufacturer) to actually perform the output.
141  */
142 int write(int file, char *ptr, int len);
143
144 #endif //_NEWLIB_LIBC_WRAPPERS_H_