Changes in / [10fdd0e:343d0da1] in mainline
- Location:
- uspace/lib/posix
- Files:
-
- 5 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/Makefile
r10fdd0e r343d0da1 41 41 ctype.c \ 42 42 fcntl.c \ 43 fnmatch.c \44 43 math.c \ 45 pwd.c \46 44 stdio.c \ 47 45 stdlib.c \ 48 stdlib/strtol.c \49 46 stdlib/strtold.c \ 50 47 string.c \ -
uspace/lib/posix/signal.h
r10fdd0e r343d0da1 37 37 38 38 #include "libc/errno.h" 39 #include "sys/types.h"40 39 41 40 /* HelenOS doesn't have signals, so calls to functions of this header … … 52 51 #undef SIG_ERR 53 52 #define SIG_ERR ((void (*)(int)) 0) 54 #undef SIG_HOLD55 #define SIG_HOLD ((void (*)(int)) 0)56 53 #undef SIG_IGN 57 54 #define SIG_IGN ((void (*)(int)) 0) … … 62 59 63 60 typedef int posix_sig_atomic_t; 64 typedef int posix_sigset_t;65 typedef struct posix_mcontext {66 // FIXME: should not be empty to avoid compiler warnings (-pedantic)67 int dummy;68 } posix_mcontext_t;69 70 union posix_sigval {71 int sival_int;72 void *sival_ptr;73 };74 75 struct posix_sigevent {76 int sigev_notify; /* Notification type. */77 int sigev_signo; /* Signal number. */78 union posix_sigval sigev_value; /* Signal value. */79 void (*sigev_notify_function)(union posix_sigval); /* Notification function. */80 posix_thread_attr_t *sigev_notify_attributes; /* Notification attributes. */81 };82 83 typedef struct {84 int si_signo;85 int si_code;86 87 int si_errno;88 89 pid_t si_pid;90 uid_t si_uid;91 void *si_addr;92 int si_status;93 94 long si_band;95 96 union posix_sigval si_value;97 } posix_siginfo_t;98 99 struct posix_sigaction {100 void (*sa_handler)(int);101 posix_sigset_t sa_mask;102 int sa_flags;103 void (*sa_sigaction)(int, posix_siginfo_t *, void *);104 };105 106 typedef struct {107 void *ss_sp;108 size_t ss_size;109 int ss_flags;110 } posix_stack_t;111 112 typedef struct posix_ucontext {113 struct posix_ucontext *uc_link;114 posix_sigset_t uc_sigmask;115 posix_stack_t uc_stack;116 posix_mcontext_t uc_mcontext;117 } posix_ucontext_t;118 119 120 /* Values of posix_sigevent::sigev_notify */121 #undef SIGEV_NONE122 #define SIGEV_NONE 0123 #undef SIGEV_SIGNAL124 #define SIGEV_SIGNAL 0125 #undef SIGEV_THREAD126 #define SIGEV_THREAD 0127 128 #undef SIGRT_MIN129 #define SIGRT_MIN 0130 #undef SIGRT_MAX131 #define SIGRT_MAX 0132 133 #undef SIG_BLOCK134 #define SIG_BLOCK 0135 #undef SIG_UNBLOCK136 #define SIG_UNBLOCK 0137 #undef SIG_SETMASK138 #define SIG_SETMASK 0139 140 #undef SA_NOCLDSTOP141 #define SA_NOCLDSTOP 0142 #undef SA_ONSTACK143 #define SA_ONSTACK 0144 #undef SA_RESETHAND145 #define SA_RESETHAND 0146 #undef SA_RESTART147 #define SA_RESTART 0148 #undef SA_SIGINFO149 #define SA_SIGINFO 0150 #undef SA_NOCLDWAIT151 #define SA_NOCLDWAIT 0152 #undef SA_NODEFER153 #define SA_NODEFER 0154 155 #undef SS_ONSTACK156 #define SS_ONSTACK 0157 #undef SS_DISABLE158 #define SS_DISABLE 0159 160 #undef MINSIGSTKSZ161 #define MINSIGSTKSZ 0162 #undef SIGSTKSZ163 #define SIGSTKSZ 0164 61 165 62 /* full POSIX set */ … … 195 92 }; 196 93 197 /* Just declared to avoid compiler warnings. */198 extern int posix_sigemptyset(posix_sigset_t *set);199 extern int posix_sigprocmask(int how, const posix_sigset_t *restrict set,200 posix_sigset_t *restrict oset);201 202 94 #ifndef LIBPOSIX_INTERNAL 203 95 #define sig_atomic_t posix_sig_atomic_t 204 #define sigset_t posix_sigset_t205 #define sigval posix_sigval206 #define sigevent posix_sigevent207 #define sigaction posix_sigaction208 #define mcontext_t posix_mcontext_t209 #define ucontext_t posix_ucontext_t210 #define stack_t posix_stack_t211 #define siginfo_t posix_siginfo_t212 #define sigemptyset posix_sigemptyset213 #define sigprocmask posix_sigprocmask214 96 #endif 215 97 -
uspace/lib/posix/stdio.h
r10fdd0e r343d0da1 42 42 43 43 /* Character Input/Output */ 44 #undef putc45 44 #define putc fputc 46 #undef getc47 45 #define getc fgetc 48 46 extern int posix_ungetc(int c, FILE *stream); … … 70 68 71 69 /* Temporary Files */ 72 #undef L_tmpnam73 #define L_tmpnam PATH_MAX74 75 70 extern char *posix_tmpnam(char *s); 76 71 -
uspace/lib/posix/stdlib.c
r10fdd0e r343d0da1 37 37 38 38 #include "stdlib.h" 39 #include "libc/sort.h"40 #include "libc/str.h"41 #include "libc/vfs/vfs.h"42 39 #include "internal/common.h" 43 #include <errno.h> // FIXME: use POSIX errno44 40 45 41 /** … … 58 54 /** 59 55 * 60 * @param i Input value.61 * @return Absolute value of the parameter.62 */63 int posix_abs(int i)64 {65 return i < 0 ? -i : i;66 }67 68 /**69 *70 * @param i Input value.71 * @return Absolute value of the parameter.72 */73 long posix_labs(long i)74 {75 return i < 0 ? -i : i;76 }77 78 /**79 *80 * @param i Input value.81 * @return Absolute value of the parameter.82 */83 long long posix_llabs(long long i)84 {85 return i < 0 ? -i : i;86 }87 88 posix_div_t posix_div(int numer, int denom)89 {90 return (posix_div_t) { .quot = numer / denom, .rem = numer % denom };91 }92 93 posix_ldiv_t posix_ldiv(long numer, long denom)94 {95 return (posix_ldiv_t) { .quot = numer / denom, .rem = numer % denom };96 }97 98 posix_lldiv_t posix_lldiv(long long numer, long long denom)99 {100 return (posix_lldiv_t) { .quot = numer / denom, .rem = numer % denom };101 }102 103 /**104 * Private helper function that serves as a compare function for qsort().105 *106 * @param elem1 First element to compare.107 * @param elem2 Second element to compare.108 * @param compare Comparison function without userdata parameter.109 *110 * @return Relative ordering of the elements.111 */112 static int sort_compare_wrapper(void *elem1, void *elem2, void *userdata)113 {114 int (*compare)(const void *, const void *) = userdata;115 return compare(elem1, elem2);116 }117 118 /**119 * Array sorting utilizing the quicksort algorithm.120 *121 56 * @param array 122 57 * @param count … … 124 59 * @param compare 125 60 */ 61 int posix_abs(int i) 62 { 63 // TODO 64 not_implemented(); 65 } 66 67 /** 68 * 69 * @param array 70 * @param count 71 * @param size 72 * @param compare 73 */ 126 74 void posix_qsort(void *array, size_t count, size_t size, 127 75 int (*compare)(const void *, const void *)) 128 76 { 129 /* Implemented in libc with one extra argument. */ 130 qsort(array, count, size, sort_compare_wrapper, compare); 131 } 132 133 /** 134 * Binary search in a sorted array. 135 * 136 * @param key Object to search for. 137 * @param base Pointer to the first element of the array. 138 * @param nmemb Number of elements in the array. 139 * @param size Size of each array element. 140 * @param compar Comparison function. 141 * @return Pointer to a matching element, or NULL if none can be found. 142 */ 143 void *posix_bsearch(const void *key, const void *base, 144 size_t nmemb, size_t size, int (*compar)(const void *, const void *)) 145 { 146 while (nmemb > 0) { 147 const void *middle = base + (nmemb / 2) * size; 148 int cmp = compar(key, middle); 149 if (cmp == 0) { 150 return (void *) middle; 151 } 152 if (middle == base) { 153 /* There is just one member left to check and it 154 * didn't match the key. Avoid infinite loop. 155 */ 156 break; 157 } 158 if (cmp < 0) { 159 nmemb = nmemb / 2; 160 } else if (cmp > 0) { 161 nmemb = nmemb - (nmemb / 2); 162 base = middle; 163 } 164 } 165 166 return NULL; 167 } 168 169 /** 170 * Retrieve a value of the given environment variable. 171 * Since HelenOS doesn't support env variables at the moment, 172 * this function always returns NULL. 77 // TODO 78 not_implemented(); 79 } 80 81 /** 173 82 * 174 83 * @param name 175 * @return Always NULL.84 * @return 176 85 */ 177 86 char *posix_getenv(const char *name) 178 87 { 179 return NULL; 88 // TODO 89 not_implemented(); 180 90 } 181 91 … … 193 103 194 104 /** 195 *196 * @param string String to be passed to a command interpreter.197 * @return198 */199 int posix_system(const char *string) {200 // TODO: does nothing at the moment201 return 0;202 }203 204 /**205 105 * 206 106 * @param name … … 210 110 char *posix_realpath(const char *name, char *resolved) 211 111 { 212 #ifndef PATH_MAX 213 assert(resolved == NULL); 214 #endif 215 216 if (name == NULL) { 217 errno = EINVAL; 218 return NULL; 219 } 220 221 // TODO: symlink resolution 222 223 /* Function absolutize is implemented in libc and declared in vfs.h. 224 * No more processing is required as HelenOS doesn't have symlinks 225 * so far (as far as I can tell), although this function will need 226 * to be updated when that support is implemented. 227 */ 228 char* absolute = absolutize(name, NULL); 229 230 if (absolute == NULL) { 231 /* POSIX requires some specific errnos to be set 232 * for some cases, but there is no way to find out from 233 * absolutize(). 234 */ 235 errno = EINVAL; 236 return NULL; 237 } 238 239 if (resolved == NULL) { 240 return absolute; 241 } else { 242 #ifdef PATH_MAX 243 str_cpy(resolved, PATH_MAX, absolute); 244 #endif 245 free(absolute); 246 return resolved; 247 } 112 // TODO 113 not_implemented(); 248 114 } 249 115 … … 253 119 * 254 120 * @param nptr 255 * @return 256 */ 257 double posix_atof(const char *nptr) 258 { 259 return posix_strtod(nptr, NULL); 121 * @param endptr 122 * @return 123 */ 124 float posix_strtof(const char *restrict nptr, char **restrict endptr) 125 { 126 return (float) posix_strtold(nptr, endptr); 260 127 } 261 128 … … 268 135 * @return 269 136 */ 270 float posix_strtof(const char *restrict nptr, char **restrict endptr)271 {272 return (float) posix_strtold(nptr, endptr);273 }274 275 /**276 * Converts a string representation of a floating-point number to277 * its native representation. See posix_strtold().278 *279 * @param nptr280 * @param endptr281 * @return282 */283 137 double posix_strtod(const char *restrict nptr, char **restrict endptr) 284 138 { 285 139 return (double) posix_strtold(nptr, endptr); 140 } 141 142 /** 143 * 144 * @param str 145 * @return 146 */ 147 int posix_atoi(const char *str) 148 { 149 // TODO 150 not_implemented(); 286 151 } 287 152 -
uspace/lib/posix/stdlib.h
r10fdd0e r343d0da1 53 53 /* Absolute Value */ 54 54 extern int posix_abs(int i); 55 extern long posix_labs(long i);56 extern long long posix_llabs(long long i);57 55 58 /* Integer division */ 59 60 typedef struct { 61 int quot, rem; 62 } posix_div_t; 63 64 typedef struct { 65 long quot, rem; 66 } posix_ldiv_t; 67 68 typedef struct { 69 long long quot, rem; 70 } posix_lldiv_t; 71 72 extern posix_div_t posix_div(int numer, int denom); 73 extern posix_ldiv_t posix_ldiv(long numer, long denom); 74 extern posix_lldiv_t posix_lldiv(long long numer, long long denom); 75 76 /* Array Functions */ 56 /* Array Sort Function */ 77 57 extern void posix_qsort(void *array, size_t count, size_t size, 78 58 int (*compare)(const void *, const void *)); 79 extern void *posix_bsearch(const void *key, const void *base,80 size_t nmemb, size_t size, int (*compar)(const void *, const void *));81 82 59 83 60 /* Environment Access */ … … 85 62 extern int posix_putenv(char *string); 86 63 87 extern int posix_system(const char *string);88 89 90 64 /* Symbolic Links */ 91 65 extern char *posix_realpath(const char *restrict name, char *restrict resolved); 92 66 93 67 /* Floating Point Conversion */ 94 extern double posix_atof(const char *nptr);95 68 extern float posix_strtof(const char *restrict nptr, char **restrict endptr); 96 69 extern double posix_strtod(const char *restrict nptr, char **restrict endptr); … … 98 71 99 72 /* Integer Conversion */ 100 extern int posix_atoi(const char *nptr); 101 extern long int posix_atol(const char *nptr); 102 extern long long int posix_atoll(const char *nptr); 103 104 extern long int posix_strtol(const char *restrict nptr, 105 char **restrict endptr, int base); 106 extern long long int posix_strtoll(const char *restrict nptr, 107 char **restrict endptr, int base); 108 extern unsigned long int posix_strtoul(const char *restrict nptr, 109 char **restrict endptr, int base); 110 extern unsigned long long int posix_strtoull( 111 const char *restrict nptr, char **restrict endptr, int base); 112 73 extern int posix_atoi(const char *str); 113 74 114 75 /* Memory Allocation */ … … 125 86 126 87 #define abs posix_abs 127 #define labs posix_labs128 #define llabs posix_llabs129 130 #define div_t posix_div_t131 #define ldiv_t posix_ldiv_t132 #define lldiv_t posix_lldiv_t133 #define div posix_div134 #define ldiv posix_ldiv135 #define lldiv posix_lldiv136 88 137 89 #define qsort posix_qsort 138 #define bsearch posix_bsearch139 90 140 91 #define getenv posix_getenv 141 #define putenv posix_putenv142 #define system posix_system143 92 144 93 #define realpath posix_realpath 145 94 146 #define atof posix_atof147 95 #define strtof posix_strtof 148 96 #define strtod posix_strtod … … 150 98 151 99 #define atoi posix_atoi 152 #define atol posix_atol153 #define atoll posix_atoll154 #define strtol posix_strtol155 #define strtoll posix_strtoll156 #define strtoul posix_strtoul157 #define strtoull posix_strtoull158 100 159 101 #define malloc posix_malloc -
uspace/lib/posix/sys/types.h
r10fdd0e r343d0da1 49 49 typedef sysarg_t posix_dev_t; 50 50 51 /* PThread types */52 typedef struct posix_thread_attr posix_thread_attr_t;53 54 51 #ifndef LIBPOSIX_INTERNAL 55 52 #define ino_t posix_ino_t … … 62 59 #define pid_t posix_pid_t 63 60 #define dev_t posix_dev_t 64 65 #define pthread_attr_t posix_thread_attr_t66 61 #endif 67 62
Note:
See TracChangeset
for help on using the changeset viewer.