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 ]

Diff markup

Differences between /userland/libc.h (Article 9) and /userland/libc.h (Article 8)


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

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