SimpleOS

LXR

Navigation



Site hébergé par : enix

The LXR Cross Referencer for SOS

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Article:1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 6.5 ] [ 7 ] [ 7.5 ] [ 8 ] [ 9 ] [ 9.5 ]

001 /* Copyright (C) 2005 David Decotigny
002    Copyright (C) 2003 Thomas Petazzoni
003 
004    This program is free software; you can redistribute it and/or
005    modify it under the terms of the GNU General Public License
006    as published by the Free Software Foundation; either version 2
007    of the License, or (at your option) any later version.
008    
009    This program is distributed in the hope that it will be useful,
010    but WITHOUT ANY WARRANTY; without even the implied warranty of
011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012    GNU General Public License for more details.
013    
014    You should have received a copy of the GNU General Public License
015    along with this program; if not, write to the Free Software
016    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
017    USA. 
018 */
019 #ifndef _SOS_USER_LIBC_H_
020 #define _SOS_USER_LIBC_H_
021 
022 #include <types.h>
023 
024 /**
025  * @file libc.h
026  *
027  * The basic user C library for user programs
028  */
029 
030 /**
031  * The most important function of a C program ! ;)
032  */
033 void exit (int status)
034      __attribute__((noreturn, alias("_sos_exit")));
035 
036 
037 /**
038  * Function to duplicate the current running process
039  */
040 pid_t fork(void)
041      __attribute__ ((alias("_sos_fork")));
042 
043 
044 /**
045  * Function to re-initialize the address space of the current process
046  * with that of the program 'progname'
047  */
048 int exec(const char *progname)
049      __attribute__ ((alias("_sos_exec")));
050 
051 
052 int nanosleep(unsigned long int sec,
053               unsigned long int nanosec)
054      __attribute__ ((alias("_sos_nanosleep")));
055 
056 /**
057  * These flags (for mmap API) MUST be consistent with those defined in
058  * paging.h and umem_vmm.h
059  */
060 #define PROT_NONE  0
061 #define PROT_READ  (1<<0)
062 #define PROT_WRITE (1<<1)
063 #define PROT_EXEC  (1<<2) /* Not supported on IA32 */
064 
065 #define MAP_SHARED (1 << 0)
066 #define MAP_FIXED  (1 << 31)
067 
068 /**
069  * Non standard version of mmap. Differences with standard version:
070  *  - the resource to map is given by its "path", not by a file descriptor
071  *  - the offset is a signed 64bits, and MUST be >= 0 (error otherwise)
072  *  - no errno support
073  */
074 void * fakemmap(void *start, size_t length, int prot , int flags,
075                 const char *path, loff_t offset);
076 
077 
078 /**
079  * Unmap the given user address interval
080  */
081 int munmap(void * start, size_t length)
082      __attribute__ ((alias("_sos_munmap")));
083 
084 
085 /**
086  * Change the access permissions of the given user address interval
087  */
088 int mprotect(const void *addr, size_t len, int prot)
089      __attribute__ ((alias("_sos_mprotect")));
090 
091 
092 
093 /**
094  * This flag tells mremap that the underlying VR may be moved, when necessary
095  */
096 #define MREMAP_MAYMOVE (1 << 30)
097 
098 /**
099  * Grow/shrink the end of the given mapping
100  */
101 void * mremap(void * old_addr, size_t old_len,
102               size_t new_len,
103               unsigned long flags);
104 
105 
106 /**
107  * Standard heap management API
108  */
109 
110 /** @note MT UNSAFE */
111 int brk(void *end_data_seg);
112 
113 /** @note MT UNSAFE */
114 void *sbrk(ptrdiff_t increment);
115 
116 /** @note MT UNSAFE */
117 void * calloc (size_t nmemb, size_t size);
118 
119 /** @note MT UNSAFE */
120 void * malloc (size_t size);
121 
122 /** @note Does nothing (not implemented yet) */
123 void free(void *ptr);
124 
125 
126 /*
127  * Filesystem subsystem
128  */
129 
130 int mount(const char *source, const char *target,
131           const char *filesystemtype, unsigned long mountflags,
132           const char *data)
133      __attribute__ ((alias("_sos_mount")));
134 int umount(const char *target)
135      __attribute__ ((alias("_sos_umount")));
136 void sync(void)
137      __attribute__ ((alias("_sos_sync")));
138 
139 struct statvfs
140 {
141   size_t        f_sz_total;  /**< Total size */
142   size_t        f_sz_free;   /**< Size left on device */
143   unsigned int  f_node_total;/**< Total allocatable FS nodes */
144   unsigned int  f_node_avail;/**< Number of available free FS nodes */
145   unsigned int  f_flags;
146 };
147 
148 int statvfs(const char *path, struct statvfs *buf)
149      __attribute__ ((alias("_sos_statvfs")));
150 
151 #define O_EXCL      (1 << 0)
152 #define O_CREAT     (1 << 1)
153 #define O_NOFOLLOW  (1 << 2)
154 #define O_DIRECTORY (1 << 3) /* Incompatible with CREAT */
155 #define O_SYNC      (1 << 4)
156 
157 #define O_RDONLY    (1 << 16)
158 #define O_WRONLY    (1 << 17)
159 #define O_RDWR      (O_RDONLY | O_WRONLY)
160 
161 /**
162  * FS access rights. Same as in kernel fs.h
163  */
164 #define S_IRUSR     00400
165 #define S_IWUSR     00200
166 #define S_IXUSR     00100
167 #define S_IRWXALL   07777 /* For symlinks */
168 
169 int open(const char *pathname, int flags, /* mode_t mode */...);
170 
171 int close(int fd)
172      __attribute__ ((alias("_sos_close")));
173 
174 int read(int fd, char * buf, size_t len);
175 int write(int fd, const char * buf, size_t len);
176 
177 /* Same as sos_seek_whence_t in kernel fs.h */
178 #define SEEK_SET 42
179 #define SEEK_CUR 24
180 #define SEEK_END 84
181 off_t lseek(int fd, off_t offset, int whence);
182 loff_t lseek64(int fd, loff_t offset, int whence);
183 void * mmap(void *start, size_t length, int prot , int flags,
184             int fd, loff_t offset);
185 int ftruncate(int fd, off_t length);
186 int ftruncate64(int fd, loff_t length)
187      __attribute__ ((alias("_sos_ftruncate64")));
188 int fcntl(int fd, int cmd, int arg)
189      __attribute__ ((alias("_sos_fcntl")));
190 
191 int creat(const char *pathname, mode_t mode)
192      __attribute__ ((alias("_sos_creat")));
193 int link (const char *oldpath, const char *newpath)
194      __attribute__ ((alias("_sos_link")));
195 int unlink(const char *pathname)
196      __attribute__ ((alias("_sos_unlink")));
197 int rename(const char *oldpath, const char *newpath)
198      __attribute__ ((alias("_sos_rename")));
199 int symlink(const char *target, const char *path)
200      __attribute__ ((alias("_sos_symlink")));
201 
202 int mkdir(const char *pathname, mode_t mode)
203      __attribute__ ((alias("_sos_mkdir")));
204 int rmdir(const char *pathname)
205      __attribute__ ((alias("_sos_rmdir")));
206 
207 int chmod(const char *path, mode_t mode)
208      __attribute__ ((alias("_sos_chmod")));
209 
210 struct dirent
211 {
212   unsigned long long int storage_location;
213   unsigned long long int offset_in_dirfile;
214 
215 /* Same as sos_fs_node_type_t in kernel fs.h */
216 #define S_IFREG 0x42
217 #define S_IFDIR 0x24
218 #define S_IFLNK 0x84
219   unsigned int type;
220   unsigned short namelen;
221 
222 #define SOS_FS_DIRENT_NAME_MAXLEN 128
223   char       name[SOS_FS_DIRENT_NAME_MAXLEN];
224 };
225 
226 /* Forward declaration (defined in libc.c) */
227 struct sos_DIR_struct;
228 #define DIR struct sos_DIR_struct
229 
230 DIR *opendir(const char *name);
231 int dirfd(const DIR * dir);
232 struct dirent *readdir(DIR *dir);
233 int closedir(DIR *dir);
234 
235 struct stat
236 {
237   int                    st_type;
238   unsigned long long int st_storage_location;
239   int                    st_access_rights;
240   unsigned int           st_nlink;
241   signed long long int   st_size;
242 };
243 
244 int stat(const char *file_name, struct stat *buf);
245 int lstat(const char *file_name, struct stat *buf);
246 
247 int chroot(const char *path)
248      __attribute__ ((alias("_sos_chroot")));
249 int chdir(const char *path)
250      __attribute__ ((alias("_sos_chdir")));
251 int fchdir(int fd)
252      __attribute__ ((alias("_sos_fchdir")));
253 
254 
255 
256 #endif /* _SOS_USER_LIBC_H_ */

source navigation ] diff markup ] identifier search ] general search ]