Changes in / [df0956ee:eccd20e6] in mainline
- Location:
- uspace/lib/posix
- Files:
-
- 47 edited
-
Makefile (modified) (1 diff)
-
assert.h (modified) (2 diffs)
-
ctype.c (modified) (9 diffs)
-
ctype.h (modified) (1 diff)
-
errno.c (modified) (2 diffs)
-
errno.h (modified) (2 diffs)
-
fcntl.c (modified) (1 diff)
-
fcntl.h (modified) (1 diff)
-
float.h (modified) (1 diff)
-
fnmatch.c (modified) (12 diffs)
-
fnmatch.h (modified) (3 diffs)
-
internal/common.h (modified) (1 diff)
-
inttypes.h (modified) (2 diffs)
-
iso646.h (modified) (2 diffs)
-
limits.h (modified) (1 diff)
-
locale.c (modified) (7 diffs)
-
locale.h (modified) (4 diffs)
-
math.c (modified) (1 diff)
-
math.h (modified) (1 diff)
-
pwd.c (modified) (3 diffs)
-
pwd.h (modified) (2 diffs)
-
signal.c (modified) (22 diffs)
-
signal.h (modified) (5 diffs)
-
stdbool.h (modified) (2 diffs)
-
stddef.h (modified) (1 diff)
-
stdint.h (modified) (2 diffs)
-
stdio.c (modified) (2 diffs)
-
stdio.h (modified) (1 diff)
-
stdio/scanf.c (modified) (3 diffs)
-
stdlib.c (modified) (21 diffs)
-
stdlib.h (modified) (5 diffs)
-
stdlib/strtol.c (modified) (12 diffs)
-
stdlib/strtold.c (modified) (12 diffs)
-
string.c (modified) (32 diffs)
-
string.h (modified) (2 diffs)
-
strings.c (modified) (8 diffs)
-
strings.h (modified) (3 diffs)
-
sys/mman.h (modified) (1 diff)
-
sys/stat.c (modified) (4 diffs)
-
sys/stat.h (modified) (1 diff)
-
sys/types.h (modified) (2 diffs)
-
sys/wait.c (modified) (2 diffs)
-
sys/wait.h (modified) (1 diff)
-
time.c (modified) (39 diffs)
-
time.h (modified) (7 diffs)
-
unistd.c (modified) (5 diffs)
-
unistd.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/Makefile
rdf0956ee reccd20e6 63 63 $(INCLUDE_LIBC): ../c/include 64 64 ln -s -f -n $^ $@ 65 -
uspace/lib/posix/assert.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Program assertion. 33 33 */ 34 34 … … 52 52 /** @} 53 53 */ 54 -
uspace/lib/posix/ctype.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Character classification. 34 34 */ 35 35 … … 43 43 * Checks whether character is a hexadecimal digit. 44 44 * 45 * @param c 46 * @return 45 * @param c Character to inspect. 46 * @return Non-zero if character match the definition, zero otherwise. 47 47 */ 48 48 int posix_isxdigit(int c) … … 56 56 * Checks whether character is a word separator. 57 57 * 58 * @param c 59 * @return 58 * @param c Character to inspect. 59 * @return Non-zero if character match the definition, zero otherwise. 60 60 */ 61 61 int posix_isblank(int c) … … 67 67 * Checks whether character is a control character. 68 68 * 69 * @param c 70 * @return 69 * @param c Character to inspect. 70 * @return Non-zero if character match the definition, zero otherwise. 71 71 */ 72 72 int posix_iscntrl(int c) … … 78 78 * Checks whether character is any printing character except space. 79 79 * 80 * @param c 81 * @return 80 * @param c Character to inspect. 81 * @return Non-zero if character match the definition, zero otherwise. 82 82 */ 83 83 int posix_isgraph(int c) … … 89 89 * Checks whether character is a printing character. 90 90 * 91 * @param c 92 * @return 91 * @param c Character to inspect. 92 * @return Non-zero if character match the definition, zero otherwise. 93 93 */ 94 94 int posix_isprint(int c) … … 100 100 * Checks whether character is a punctuation. 101 101 * 102 * @param c 103 * @return 102 * @param c Character to inspect. 103 * @return Non-zero if character match the definition, zero otherwise. 104 104 */ 105 105 int posix_ispunct(int c) 106 106 { 107 return !isspace(c) && !isalnum(c) ;107 return !isspace(c) && !isalnum(c) && posix_isprint(c); 108 108 } 109 109 … … 111 111 * Checks whether character is ASCII. (obsolete) 112 112 * 113 * @param c 114 * @return 113 * @param c Character to inspect. 114 * @return Non-zero if character match the definition, zero otherwise. 115 115 */ 116 116 extern int posix_isascii(int c) … … 122 122 * Converts argument to a 7-bit ASCII character. (obsolete) 123 123 * 124 * @param c 125 * @return 124 * @param c Character to convert. 125 * @return Coverted character. 126 126 */ 127 127 extern int posix_toascii(int c) -
uspace/lib/posix/ctype.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Character classification. 34 34 */ 35 35 -
uspace/lib/posix/errno.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file System error numbers. 33 33 */ 34 34 … … 51 51 /** @} 52 52 */ 53 -
uspace/lib/posix/errno.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file System error numbers. 33 33 */ 34 34 … … 325 325 /** @} 326 326 */ 327 -
uspace/lib/posix/fcntl.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file File control. 33 33 */ 34 34 -
uspace/lib/posix/fcntl.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file File control. 33 33 */ 34 34 -
uspace/lib/posix/float.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Floating type support. 33 33 */ 34 34 -
uspace/lib/posix/fnmatch.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Filename-matching. 33 33 */ 34 34 … … 45 45 #include "internal/common.h" 46 46 #include "fnmatch.h" 47 48 // TODO: documentation 47 49 48 50 #define INVALID_PATTERN -1 … … 169 171 }; 170 172 173 /** 174 * 175 * @param key 176 * @param elem 177 * @return 178 */ 171 179 static int _class_compare(const void *key, const void *elem) 172 180 { … … 175 183 } 176 184 185 /** 186 * 187 * @param cname 188 * @param c 189 * @return 190 */ 177 191 static bool _is_in_class (const char *cname, int c) 178 192 { … … 191 205 } 192 206 207 /** 208 * 209 * @param pattern 210 * @param str 211 * @param flags 212 * @return 213 */ 193 214 static int _match_char_class(const char **pattern, const char *str, int flags) 194 215 { … … 204 225 /************** END CHARACTER CLASSES ****************/ 205 226 227 /** 228 * 229 * @param pattern 230 * @param flags 231 * @return 232 */ 206 233 static _coll_elm_t _next_coll_elm(const char **pattern, int flags) 207 234 { … … 240 267 241 268 /** 242 * 269 * 270 * @param pattern 271 * @param str 272 * @param flags 273 * @return 243 274 */ 244 275 static int _match_bracket_expr(const char **pattern, const char *str, int flags) … … 327 358 328 359 /** 329 * 360 * 361 * @param pattern 362 * @param string 363 * @param flags 364 * @return 330 365 */ 331 366 static bool _partial_match(const char **pattern, const char **string, int flags) … … 421 456 } 422 457 458 /** 459 * 460 * @param pattern 461 * @param string 462 * @param flags 463 * @return 464 */ 423 465 static bool _full_match(const char *pattern, const char *string, int flags) 424 466 { … … 476 518 } 477 519 520 /** 521 * 522 * @param s 523 * @return 524 */ 478 525 static char *_casefold(const char *s) 479 526 { … … 506 553 507 554 if ((flags & FNM_CASEFOLD) != 0) { 508 free((char *) pattern); 509 free((char *) string); 555 if (pattern) { 556 free((char *) pattern); 557 } 558 if (string) { 559 free((char *) string); 560 } 510 561 } 511 562 … … 604 655 /** @} 605 656 */ 606 -
uspace/lib/posix/fnmatch.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Filename-matching. 33 33 */ 34 34 … … 36 36 #define POSIX_FNMATCH_H_ 37 37 38 /* Error Values .*/38 /* Error Values */ 39 39 #undef FNM_NOMATCH 40 40 #define FNM_NOMATCH 1 … … 66 66 /** @} 67 67 */ 68 -
uspace/lib/posix/internal/common.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Helper definitions common for all libposix files. 33 33 */ 34 34 -
uspace/lib/posix/inttypes.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Fixed size integer types. 33 33 */ 34 34 … … 39 39 #include "libc/inttypes.h" 40 40 41 extern posix_intmax_t posix_strtoimax(const char *restrict nptr, 42 char **restrict endptr, int base); 43 extern posix_uintmax_t posix_strtoumax(const char *restrict nptr, 44 char **restrict endptr, int base); 45 46 #ifndef LIBPOSIX_INTERNAL 47 #define strtoimax posix_strtoimax 48 #define strtoumax posix_strtoumax 49 #endif 50 41 51 #endif /* POSIX_INTTYPES_H_ */ 42 52 -
uspace/lib/posix/iso646.h
rdf0956ee reccd20e6 1 /* 2 * Copyright (c) 2011 Jiri Zarevucky 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * - Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * - The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 1 28 2 29 /** @addtogroup libposix 3 30 * @{ 4 31 */ 5 /** @file 32 /** @file Alternative spellings. 6 33 */ 7 34 … … 25 52 /** @} 26 53 */ 27 -
uspace/lib/posix/limits.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Implementation-defined limit constants. 33 33 */ 34 34 -
uspace/lib/posix/locale.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Locale-specific definitions. 33 33 */ 34 34 … … 41 41 #include "limits.h" 42 42 #include "string.h" 43 44 // TODO: documentation 43 45 44 46 struct __posix_locale { … … 73 75 }; 74 76 77 /** 78 * 79 * @param category 80 * @param locale 81 * @return 82 */ 75 83 char *posix_setlocale(int category, const char *locale) 76 84 { … … 83 91 } 84 92 93 /** 94 * 95 * @return 96 */ 85 97 struct posix_lconv *posix_localeconv(void) 86 98 { … … 89 101 } 90 102 103 /** 104 * 105 * @param locobj 106 * @return 107 */ 91 108 posix_locale_t posix_duplocale(posix_locale_t locobj) 92 109 { … … 104 121 } 105 122 123 /** 124 * 125 * @param locobj 126 */ 106 127 void posix_freelocale(posix_locale_t locobj) 107 128 { 108 free(locobj); 129 if (locobj) { 130 free(locobj); 131 } 109 132 } 110 133 134 /** 135 * 136 * @param category_mask 137 * @param locale 138 * @param base 139 * @return 140 */ 111 141 posix_locale_t posix_newlocale(int category_mask, const char *locale, 112 142 posix_locale_t base) … … 129 159 } 130 160 131 posix_locale_t posix_uselocale (posix_locale_t newloc) 161 /** 162 * 163 * @param newloc 164 * @return 165 */ 166 posix_locale_t posix_uselocale(posix_locale_t newloc) 132 167 { 133 168 // TODO -
uspace/lib/posix/locale.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Locale-specific definitions. 33 33 */ 34 34 35 35 #ifndef POSIX_LOCALE_H_ 36 36 #define POSIX_LOCALE_H_ 37 38 // TODO: documentation 37 39 38 40 #ifndef NULL … … 83 85 84 86 struct posix_lconv { 85 char *currency_symbol;86 char *decimal_point;87 char frac_digits;88 char *grouping;89 char *int_curr_symbol;90 char int_frac_digits;91 char int_n_cs_precedes;92 char int_n_sep_by_space;93 char int_n_sign_posn;94 char int_p_cs_precedes;95 char int_p_sep_by_space;96 char int_p_sign_posn;97 char *mon_decimal_point;98 char *mon_grouping;99 char *mon_thousands_sep;100 char *negative_sign;101 char n_cs_precedes;102 char n_sep_by_space;103 char n_sign_posn;104 char *positive_sign;105 char p_cs_precedes;106 char p_sep_by_space;107 char p_sign_posn;108 char *thousands_sep;87 char *currency_symbol; 88 char *decimal_point; 89 char frac_digits; 90 char *grouping; 91 char *int_curr_symbol; 92 char int_frac_digits; 93 char int_n_cs_precedes; 94 char int_n_sep_by_space; 95 char int_n_sign_posn; 96 char int_p_cs_precedes; 97 char int_p_sep_by_space; 98 char int_p_sign_posn; 99 char *mon_decimal_point; 100 char *mon_grouping; 101 char *mon_thousands_sep; 102 char *negative_sign; 103 char n_cs_precedes; 104 char n_sep_by_space; 105 char n_sign_posn; 106 char *positive_sign; 107 char p_cs_precedes; 108 char p_sep_by_space; 109 char p_sign_posn; 110 char *thousands_sep; 109 111 }; 110 112 … … 117 119 extern posix_locale_t posix_newlocale(int category_mask, const char *locale, 118 120 posix_locale_t base); 119 extern posix_locale_t posix_uselocale (posix_locale_t newloc);121 extern posix_locale_t posix_uselocale(posix_locale_t newloc); 120 122 121 123 #ifndef LIBPOSIX_INTERNAL … … 131 133 #endif 132 134 133 134 135 #endif /* POSIX_LOCALE_H_ */ 135 136 -
uspace/lib/posix/math.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Mathematical operations. 33 33 */ 34 34 -
uspace/lib/posix/math.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Mathematical operations. 33 33 */ 34 34 -
uspace/lib/posix/pwd.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Password handling. 33 33 */ 34 34 35 35 #define LIBPOSIX_INTERNAL 36 36 37 #include "pwd.h" 37 38 #include "string.h" 38 39 #include "errno.h" 39 40 41 // TODO: documentation 40 42 41 43 static bool entry_read = false; … … 53 55 * Since HelenOS doesn't have user accounts, this always returns 54 56 * the same made-up entry. 57 * 58 * @return 55 59 */ 56 60 struct posix_passwd *posix_getpwent(void) … … 178 182 /** @} 179 183 */ 180 -
uspace/lib/posix/pwd.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Password handling. 33 33 */ 34 34 35 35 #ifndef POSIX_PWD_H_ 36 36 #define POSIX_PWD_H_ 37 38 // TODO: documentation 37 39 38 40 #include "sys/types.h" … … 76 78 /** @} 77 79 */ 78 -
uspace/lib/posix/signal.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Signal handling. 33 33 */ 34 34 … … 45 45 #include "libc/task.h" 46 46 47 // TODO: documentation 48 47 49 /* Used to serialize signal handling. */ 48 50 static FIBRIL_MUTEX_INITIALIZE(_signal_mutex); … … 63 65 }; 64 66 67 /** 68 * 69 * @param signo 70 */ 65 71 void __posix_default_signal_handler(int signo) 66 72 { … … 118 124 } 119 125 126 /** 127 * 128 * @param signo 129 */ 120 130 void __posix_hold_signal_handler(int signo) 121 131 { … … 123 133 } 124 134 135 /** 136 * 137 * @param signo 138 */ 125 139 void __posix_ignore_signal_handler(int signo) 126 140 { … … 128 142 } 129 143 130 144 /** 145 * 146 * @param set 147 * @return 148 */ 131 149 int posix_sigemptyset(posix_sigset_t *set) 132 150 { … … 137 155 } 138 156 157 /** 158 * 159 * @param set 160 * @return 161 */ 139 162 int posix_sigfillset(posix_sigset_t *set) 140 163 { … … 145 168 } 146 169 170 /** 171 * 172 * @param set 173 * @param signo 174 * @return 175 */ 147 176 int posix_sigaddset(posix_sigset_t *set, int signo) 148 177 { … … 153 182 } 154 183 184 /** 185 * 186 * @param set 187 * @param signo 188 * @return 189 */ 155 190 int posix_sigdelset(posix_sigset_t *set, int signo) 156 191 { … … 161 196 } 162 197 198 /** 199 * 200 * @param set 201 * @param signo 202 * @return 203 */ 163 204 int posix_sigismember(const posix_sigset_t *set, int signo) 164 205 { … … 168 209 } 169 210 211 /** 212 * 213 * @param sig 214 * @param act 215 * @param oact 216 */ 170 217 static void _sigaction_unsafe(int sig, const struct posix_sigaction *restrict act, 171 218 struct posix_sigaction *restrict oact) … … 182 229 } 183 230 231 /** 232 * 233 * @param sig 234 * @param act 235 * @param oact 236 * @return 237 */ 184 238 int posix_sigaction(int sig, const struct posix_sigaction *restrict act, 185 239 struct posix_sigaction *restrict oact) … … 206 260 } 207 261 262 /** 263 * 264 * @param sig 265 * @param func 266 * @return 267 */ 208 268 void (*posix_signal(int sig, void (*func)(int)))(int) 209 269 { … … 222 282 } 223 283 284 /** 285 * 286 * @param signo 287 * @param siginfo 288 * @return 289 */ 224 290 static int _raise_sigaction(int signo, posix_siginfo_t *siginfo) 225 291 { … … 259 325 } 260 326 327 /** 328 * 329 * @param sig 330 * @return 331 */ 261 332 int posix_raise(int sig) 262 333 { … … 273 344 } 274 345 346 /** 347 * 348 * @param pid 349 * @param signo 350 * @return 351 */ 275 352 int posix_kill(posix_pid_t pid, int signo) 276 353 { … … 303 380 } 304 381 382 /** 383 * 384 * @param pid 385 * @param sig 386 * @return 387 */ 305 388 int posix_killpg(posix_pid_t pid, int sig) 306 389 { … … 309 392 } 310 393 394 /** 395 * 396 * @param pinfo 397 * @param message 398 */ 311 399 void posix_psiginfo(const posix_siginfo_t *pinfo, const char *message) 312 400 { … … 316 404 } 317 405 406 /** 407 * 408 * @param signum 409 * @param message 410 */ 318 411 void posix_psignal(int signum, const char *message) 319 412 { … … 326 419 } 327 420 421 /** 422 * 423 * @param how 424 * @param set 425 * @param oset 426 * @return 427 */ 328 428 int posix_thread_sigmask(int how, const posix_sigset_t *restrict set, 329 429 posix_sigset_t *restrict oset) … … 358 458 } 359 459 460 /** 461 * 462 * @param how 463 * @param set 464 * @param oset 465 * @return 466 */ 360 467 int posix_sigprocmask(int how, const posix_sigset_t *restrict set, 361 468 posix_sigset_t *restrict oset) … … 371 478 /** @} 372 479 */ 373 -
uspace/lib/posix/signal.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Signal handling. 33 33 */ 34 34 35 35 #ifndef POSIX_SIGNAL_H_ 36 36 #define POSIX_SIGNAL_H_ 37 38 // TODO: documentation 37 39 38 40 #include "libc/errno.h" … … 107 109 posix_mcontext_t uc_mcontext; 108 110 } posix_ucontext_t; 109 110 111 111 112 /* Values of posix_sigevent::sigev_notify */ … … 154 155 #define SIGSTKSZ 0 155 156 156 /* full POSIX set */157 /* Full POSIX set */ 157 158 enum { 158 159 /* Termination Signals */ … … 214 215 215 216 /* Values for sigaction field si_code. */ 216 217 217 enum { 218 218 SI_USER, … … 287 287 #define sigevent posix_sigevent 288 288 #endif 289 #define sigaction posix_sigaction290 289 #define mcontext_t posix_mcontext_t 291 290 #define ucontext_t posix_ucontext_t 292 291 #define stack_t posix_stack_t 293 292 #define siginfo_t posix_siginfo_t 293 294 #define sigaction posix_sigaction 294 295 295 296 #define signal posix_signal -
uspace/lib/posix/stdbool.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Boolean type and values. 33 33 */ 34 34 … … 50 50 51 51 #endif /* POSIX_STDBOOL_H_ */ 52 -
uspace/lib/posix/stddef.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Standard type definitions. 33 33 */ 34 34 -
uspace/lib/posix/stdint.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Integer types. 33 33 */ 34 34 … … 88 88 #define AOFF64_MIN UINT64_MIN 89 89 90 #undef INTMAX_MIN 91 #undef INTMAX_MAX 92 #define INTMAX_MIN INT64_MIN 93 #define INTMAX_MAX INT64_MAX 94 95 #undef UINTMAX_MIN 96 #undef UINTMAX_MAX 97 #define UINTMAX_MIN UINT64_MIN 98 #define UINTMAX_MAX UINT64_MAX 99 90 100 #include "libc/sys/types.h" 91 101 -
uspace/lib/posix/stdio.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Standard buffered input/output. 34 34 */ 35 35 … … 355 355 { 356 356 off64_t ret = ftell(stream); 357 if (ret == -1) { 358 return errno; 359 } 360 pos->offset = ret; 361 return 0; 357 if (ret != -1) { 358 pos->offset = ret; 359 return 0; 360 } else { 361 return -1; 362 } 362 363 } 363 364 -
uspace/lib/posix/stdio.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Standard buffered input/output. 34 34 */ 35 35 -
uspace/lib/posix/stdio/scanf.c
rdf0956ee reccd20e6 303 303 self->fetched = 0; 304 304 self->cursor = NULL; 305 free(self->window); 306 self->window = NULL; 305 if (self->window) { 306 free(self->window); 307 self->window = NULL; 308 } 307 309 self->window_size = 0; 308 310 self->state = _PROV_CONSTRUCTED; … … 653 655 /* Update the cursor so it can be returned to the provider. */ 654 656 cur_borrowed += cur_updated - cur_limited; 655 if (width != -1 ) {657 if (width != -1 && cur_limited != NULL) { 656 658 /* Deallocate duplicated part of the cursor view. */ 657 659 free(cur_limited); … … 833 835 /* Update the cursor so it can be returned to the provider. */ 834 836 cur_borrowed += cur_updated - cur_limited; 835 if (width != -1 ) {837 if (width != -1 && cur_limited != NULL) { 836 838 /* Deallocate duplicated part of the cursor view. */ 837 839 free(cur_limited); -
uspace/lib/posix/stdlib.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Standard library definitions. 34 34 */ 35 35 … … 40 40 41 41 #include "errno.h" 42 #include "limits.h" 42 43 43 44 #include "libc/sort.h" … … 59 60 60 61 /** 62 * Integer absolute value. 61 63 * 62 64 * @param i Input value. … … 69 71 70 72 /** 73 * Long integer absolute value. 71 74 * 72 75 * @param i Input value. … … 79 82 80 83 /** 84 * Long long integer absolute value. 81 85 * 82 86 * @param i Input value. … … 88 92 } 89 93 94 /** 95 * Compute the quotient and remainder of an integer division. 96 * 97 * @param numer Numerator. 98 * @param denom Denominator. 99 * @return Quotient and remainder packed into structure. 100 */ 90 101 posix_div_t posix_div(int numer, int denom) 91 102 { … … 93 104 } 94 105 106 /** 107 * Compute the quotient and remainder of a long integer division. 108 * 109 * @param numer Numerator. 110 * @param denom Denominator. 111 * @return Quotient and remainder packed into structure. 112 */ 95 113 posix_ldiv_t posix_ldiv(long numer, long denom) 96 114 { … … 98 116 } 99 117 118 /** 119 * Compute the quotient and remainder of a long long integer division. 120 * 121 * @param numer Numerator. 122 * @param denom Denominator. 123 * @return Quotient and remainder packed into structure. 124 */ 100 125 posix_lldiv_t posix_lldiv(long long numer, long long denom) 101 126 { … … 109 134 * @param elem2 Second element to compare. 110 135 * @param compare Comparison function without userdata parameter. 111 *112 136 * @return Relative ordering of the elements. 113 137 */ … … 115 139 { 116 140 int (*compare)(const void *, const void *) = userdata; 117 return compare(elem1, elem2); 141 int ret = compare(elem1, elem2); 142 143 /* Native qsort internals expect this. */ 144 if (ret < 0) { 145 return -1; 146 } else if (ret > 0) { 147 return 1; 148 } else { 149 return 0; 150 } 118 151 } 119 152 … … 121 154 * Array sorting utilizing the quicksort algorithm. 122 155 * 123 * @param array 124 * @param count 125 * @param size 126 * @param compare 156 * @param array Array of elements to sort. 157 * @param count Number of elements in the array. 158 * @param size Width of each element. 159 * @param compare Decides relative ordering of two elements. 127 160 */ 128 161 void posix_qsort(void *array, size_t count, size_t size, … … 171 204 /** 172 205 * Retrieve a value of the given environment variable. 206 * 173 207 * Since HelenOS doesn't support env variables at the moment, 174 208 * this function always returns NULL. 175 209 * 176 * @param name 177 * @return Always NULL.210 * @param name Name of the variable. 211 * @return Value of the variable or NULL if such variable does not exist. 178 212 */ 179 213 char *posix_getenv(const char *name) … … 195 229 196 230 /** 197 * 198 * @param string String to be passed to a command interpreter. 199 * @return 231 * Issue a command. 232 * 233 * @param string String to be passed to a command interpreter or NULL. 234 * @return Termination status of the command if the command is not NULL, 235 * otherwise indicate whether there is a command interpreter (non-zero) 236 * or not (zero). 200 237 */ 201 238 int posix_system(const char *string) { … … 205 242 206 243 /** 207 * 208 * @param name 209 * @param resolved 210 * @return 211 */ 212 char *posix_realpath(const char *name, char *resolved) 244 * Resolve absolute pathname. 245 * 246 * @param name Pathname to be resolved. 247 * @param resolved Either buffer for the resolved absolute pathname or NULL. 248 * @return On success, either resolved (if it was not NULL) or pointer to the 249 * newly allocated buffer containing the absolute pathname (if resolved was 250 * NULL). Otherwise NULL. 251 * 252 */ 253 char *posix_realpath(const char *restrict name, char *restrict resolved) 213 254 { 214 255 #ifndef PATH_MAX … … 254 295 * its native representation. See posix_strtold(). 255 296 * 256 * @param nptr 257 * @return 297 * @param nptr String representation of a floating-point number. 298 * @return Double-precision number resulting from the string conversion. 258 299 */ 259 300 double posix_atof(const char *nptr) … … 266 307 * its native representation. See posix_strtold(). 267 308 * 268 * @param nptr 269 * @param endptr 270 * @return 309 * @param nptr String representation of a floating-point number. 310 * @param endptr Pointer to the final part of the string which 311 * was not used for conversion. 312 * @return Single-precision number resulting from the string conversion. 271 313 */ 272 314 float posix_strtof(const char *restrict nptr, char **restrict endptr) … … 279 321 * its native representation. See posix_strtold(). 280 322 * 281 * @param nptr 282 * @param endptr 283 * @return 323 * @param nptr String representation of a floating-point number. 324 * @param endptr Pointer to the final part of the string which 325 * was not used for conversion. 326 * @return Double-precision number resulting from the string conversion. 284 327 */ 285 328 double posix_strtod(const char *restrict nptr, char **restrict endptr) … … 289 332 290 333 /** 291 * 292 * @param size 293 * @return 334 * Allocate memory chunk. 335 * 336 * @param size Size of the chunk to allocate. 337 * @return Either pointer to the allocated chunk or NULL if not possible. 294 338 */ 295 339 void *posix_malloc(size_t size) … … 299 343 300 344 /** 301 * 302 * @param nelem 303 * @param elsize 304 * @return 345 * Allocate memory for an array of elements. 346 * 347 * @param nelem Number of elements in the array. 348 * @param elsize Size of each element. 349 * @return Either pointer to the allocated array or NULL if not possible. 305 350 */ 306 351 void *posix_calloc(size_t nelem, size_t elsize) … … 310 355 311 356 /** 312 * 313 * @param ptr 314 * @param size 315 * @return 357 * Reallocate memory chunk to a new size. 358 * 359 * @param ptr Memory chunk to reallocate. Might be NULL. 360 * @param size Size of the reallocated chunk. Might be zero. 361 * @return Either NULL or the pointer to the newly reallocated chunk. 316 362 */ 317 363 void *posix_realloc(void *ptr, size_t size) 318 364 { 319 return realloc(ptr, size); 320 } 321 322 /** 323 * 324 * @param ptr 365 if (ptr != NULL && size == 0) { 366 /* Native realloc does not handle this special case. */ 367 free(ptr); 368 return NULL; 369 } else { 370 return realloc(ptr, size); 371 } 372 } 373 374 /** 375 * Free allocated memory chunk. 376 * 377 * @param ptr Memory chunk to be freed. 325 378 */ 326 379 void posix_free(void *ptr) … … 343 396 344 397 /** 345 * Should read system load statistics. Not supported. Always returns -1. 346 * 347 * @param loadavg 348 * @param nelem 349 * @return 398 * Get system load average statistics. 399 * 400 * Not supported. Always returns -1. 401 * 402 * @param loadavg Array where the load averages shall be placed. 403 * @param nelem Maximum number of elements to be placed into the array. 404 * @return Number of elements placed into the array on success, -1 otherwise. 350 405 */ 351 406 int bsd_getloadavg(double loadavg[], int nelem) -
uspace/lib/posix/stdlib.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Standard library definitions. 34 34 */ 35 35 … … 56 56 extern long long posix_llabs(long long i); 57 57 58 /* Integer division */58 /* Integer Division */ 59 59 60 60 typedef struct { … … 80 80 size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 81 81 82 83 82 /* Environment Access */ 84 83 extern char *posix_getenv(const char *name); 85 84 extern int posix_putenv(char *string); 86 87 85 extern int posix_system(const char *string); 88 89 86 90 87 /* Symbolic Links */ … … 101 98 extern long int posix_atol(const char *nptr); 102 99 extern long long int posix_atoll(const char *nptr); 103 104 100 extern long int posix_strtol(const char *restrict nptr, 105 101 char **restrict endptr, int base); … … 110 106 extern unsigned long long int posix_strtoull( 111 107 const char *restrict nptr, char **restrict endptr, int base); 112 113 108 114 109 /* Memory Allocation */ -
uspace/lib/posix/stdlib/strtol.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Backend for integer conversions. 33 33 */ 34 34 … … 38 38 #include "../stdlib.h" 39 39 40 #include "../limits.h"41 40 #include "../ctype.h" 42 41 #include "../errno.h" 43 44 // TODO: documentation 45 42 #include "../inttypes.h" 43 #include "../limits.h" 44 45 #define intmax_t posix_intmax_t 46 #define uintmax_t posix_uintmax_t 47 48 /** 49 * Decides whether a digit belongs to a particular base. 50 * 51 * @param c Character representation of the digit. 52 * @param base Base against which the digit shall be tested. 53 * @return True if the digit belongs to the base, false otherwise. 54 */ 46 55 static inline bool is_digit_in_base(int c, int base) 47 56 { … … 54 63 } 55 64 56 static inline int get_digit_in_base(int c, int base) 65 /** 66 * Derive a digit from its character representation. 67 * 68 * @param c Character representation of the digit. 69 * @return Digit value represented by an integer. 70 */ 71 static inline int digit_value(int c) 57 72 { 58 73 if (c <= '9') { … … 63 78 } 64 79 65 static inline unsigned long long internal_strtol( 80 /** 81 * Generic function for parsing an integer from it's string representation. 82 * Different variants differ in lower and upper bounds. 83 * The parsed string returned by this function is always positive, sign 84 * information is provided via a dedicated parameter. 85 * 86 * @param nptr Input string. 87 * @param endptr If non-NULL, *endptr is set to the position of the first 88 * unrecognized character. If no digit has been parsed, value of 89 * nptr is stored there (regardless of any skipped characters at the 90 * beginning). 91 * @param base Expected base of the string representation. If 0, base is 92 * determined to be decimal, octal or hexadecimal using the same rules 93 * as C syntax. Otherwise, value must be between 2 and 36, inclusive. 94 * @param min_value Lower bound for the resulting conversion. 95 * @param max_value Upper bound for the resulting conversion. 96 * @param out_negative Either NULL for unsigned conversion or a pointer to the 97 * bool variable into which shall be placed the negativity of the resulting 98 * converted value. 99 * @return The absolute value of the parsed value, or the closest in-range value 100 * if the parsed value is out of range. If the input is invalid, zero is 101 * returned and errno is set to EINVAL. 102 */ 103 static inline uintmax_t internal_strtol( 66 104 const char *restrict nptr, char **restrict endptr, int base, 67 const long long min_value, const unsigned long longmax_value,105 const intmax_t min_value, const uintmax_t max_value, 68 106 bool *restrict out_negative) 69 107 { … … 78 116 } 79 117 80 unsigned long long real_max_value = max_value; 118 /* The maximal absolute value that can be returned in this run. 119 * Depends on sign. 120 */ 121 uintmax_t real_max_value = max_value; 81 122 82 123 /* Current index in the input string. */ 83 int i = 0;124 size_t i = 0; 84 125 bool negative = false; 85 126 … … 93 134 case '-': 94 135 negative = true; 95 real_max_value = -min_value; 136 137 /* The strange computation is are there to avoid a corner case 138 * where -min_value can't be represented in intmax_t. 139 * (I'm not exactly sure what the semantics are in such a 140 * case, but this should be safe for any case.) 141 */ 142 real_max_value = (min_value == 0) 143 ? 0 144 :(((uintmax_t) -(min_value + 1)) + 1); 145 96 146 /* fallthrough */ 97 147 case '+': … … 104 154 if (nptr[i] == '0') { 105 155 if (tolower(nptr[i + 1]) == 'x') { 156 /* 0x... is hex. */ 106 157 base = 16; 107 158 i += 2; 108 159 } else { 160 /* 0... is octal. */ 109 161 base = 8; 110 162 } 111 163 } else { 164 /* Anything else is decimal by default. */ 112 165 base = 10; 113 166 } 114 167 break; 115 168 case 16: 169 /* Allow hex number to be prefixed with "0x". */ 116 170 if (nptr[i] == '0' && tolower(nptr[i + 1]) == 'x') { 117 171 i += 2; … … 133 187 * of overflow. 134 188 */ 135 u nsigned long longmax_safe_value = (real_max_value - base + 1) / base;136 137 u nsigned long longresult = 0;189 uintmax_t max_safe_value = (real_max_value - base + 1) / base; 190 191 uintmax_t result = 0; 138 192 139 193 if (real_max_value == 0) { … … 145 199 if (nptr[i] != '0') { 146 200 errno = ERANGE; 147 result = max_value;201 result = 0; 148 202 } 149 203 i++; … … 152 206 153 207 while (is_digit_in_base(nptr[i], base)) { 154 int digit = get_digit_in_base(nptr[i], base);208 int digit = digit_value(nptr[i]); 155 209 156 210 if (result > max_safe_value) { 157 211 /* corner case, check for overflow */ 158 212 159 unsigned long long 160 boundary = (real_max_value - digit) / base; 213 uintmax_t boundary = (real_max_value - digit) / base; 161 214 162 215 if (result > boundary) { 163 216 /* overflow */ 164 217 errno = ERANGE; 165 result = max_value;218 result = real_max_value; 166 219 break; 167 220 } … … 188 241 } 189 242 243 /** 244 * Convert a string to an integer. 245 * 246 * @param nptr Input string. 247 * @return Result of the conversion. 248 */ 190 249 int posix_atoi(const char *nptr) 191 250 { 192 251 bool neg = false; 193 u nsigned long longresult =252 uintmax_t result = 194 253 internal_strtol(nptr, NULL, 10, INT_MIN, INT_MAX, &neg); 195 254 196 return (int) (neg ? -result : result); 197 } 198 255 return (neg ? ((int) -result) : (int) result); 256 } 257 258 /** 259 * Convert a string to a long integer. 260 * 261 * @param nptr Input string. 262 * @return Result of the conversion. 263 */ 199 264 long posix_atol(const char *nptr) 200 265 { 201 266 bool neg = false; 202 u nsigned long longresult =267 uintmax_t result = 203 268 internal_strtol(nptr, NULL, 10, LONG_MIN, LONG_MAX, &neg); 204 269 205 return (long) (neg ? -result : result); 206 } 207 270 return (neg ? ((long) -result) : (long) result); 271 } 272 273 /** 274 * Convert a string to a long long integer. 275 * 276 * @param nptr Input string. 277 * @return Result of the conversion. 278 */ 208 279 long long posix_atoll(const char *nptr) 209 280 { 210 281 bool neg = false; 211 u nsigned long longresult =282 uintmax_t result = 212 283 internal_strtol(nptr, NULL, 10, LLONG_MIN, LLONG_MAX, &neg); 213 284 214 return (long long) (neg ? -result : result); 215 } 216 285 return (neg ? ((long long) -result) : (long long) result); 286 } 287 288 /** 289 * Convert a string to a long integer. 290 * 291 * @param nptr Input string. 292 * @param endptr Pointer to the final part of the string which 293 * was not used for conversion. 294 * @param base Expected base of the string representation. 295 * @return Result of the conversion. 296 */ 217 297 long posix_strtol(const char *restrict nptr, char **restrict endptr, int base) 218 298 { 219 299 bool neg = false; 220 u nsigned long longresult =300 uintmax_t result = 221 301 internal_strtol(nptr, endptr, base, LONG_MIN, LONG_MAX, &neg); 222 302 223 return (long) (neg ? -result : result); 224 } 225 303 return (neg ? ((long) -result) : ((long) result)); 304 } 305 306 /** 307 * Convert a string to a long long integer. 308 * 309 * @param nptr Input string. 310 * @param endptr Pointer to the final part of the string which 311 * was not used for conversion. 312 * @param base Expected base of the string representation. 313 * @return Result of the conversion. 314 */ 226 315 long long posix_strtoll( 227 316 const char *restrict nptr, char **restrict endptr, int base) 228 317 { 229 318 bool neg = false; 230 u nsigned long longresult =319 uintmax_t result = 231 320 internal_strtol(nptr, endptr, base, LLONG_MIN, LLONG_MAX, &neg); 232 321 233 return (long long) (neg ? -result : result); 234 } 235 322 return (neg ? ((long long) -result) : (long long) result); 323 } 324 325 /** 326 * Convert a string to a largest signed integer type. 327 * 328 * @param nptr Input string. 329 * @param endptr Pointer to the final part of the string which 330 * was not used for conversion. 331 * @param base Expected base of the string representation. 332 * @return Result of the conversion. 333 */ 334 intmax_t posix_strtoimax( 335 const char *restrict nptr, char **restrict endptr, int base) 336 { 337 bool neg = false; 338 uintmax_t result = 339 internal_strtol(nptr, endptr, base, INTMAX_MIN, INTMAX_MAX, &neg); 340 341 return (neg ? ((intmax_t) -result) : (intmax_t) result); 342 } 343 344 /** 345 * Convert a string to an unsigned long integer. 346 * 347 * @param nptr Input string. 348 * @param endptr Pointer to the final part of the string which 349 * was not used for conversion. 350 * @param base Expected base of the string representation. 351 * @return Result of the conversion. 352 */ 236 353 unsigned long posix_strtoul( 237 354 const char *restrict nptr, char **restrict endptr, int base) 238 355 { 239 u nsigned long longresult =356 uintmax_t result = 240 357 internal_strtol(nptr, endptr, base, 0, ULONG_MAX, NULL); 241 358 … … 243 360 } 244 361 362 /** 363 * Convert a string to an unsigned long long integer. 364 * 365 * @param nptr Input string. 366 * @param endptr Pointer to the final part of the string which 367 * was not used for conversion. 368 * @param base Expected base of the string representation. 369 * @return Result of the conversion. 370 */ 245 371 unsigned long long posix_strtoull( 246 372 const char *restrict nptr, char **restrict endptr, int base) 247 373 { 248 return internal_strtol(nptr, endptr, base, 0, ULLONG_MAX, NULL); 249 } 250 374 uintmax_t result = 375 internal_strtol(nptr, endptr, base, 0, ULLONG_MAX, NULL); 376 377 return (unsigned long long) result; 378 } 379 380 /** 381 * Convert a string to a largest unsigned integer type. 382 * 383 * @param nptr Input string. 384 * @param endptr Pointer to the final part of the string which 385 * was not used for conversion. 386 * @param base Expected base of the string representation. 387 * @return Result of the conversion. 388 */ 389 uintmax_t posix_strtoumax( 390 const char *restrict nptr, char **restrict endptr, int base) 391 { 392 uintmax_t result = 393 internal_strtol(nptr, endptr, base, 0, UINTMAX_MAX, NULL); 394 395 return result; 396 } 251 397 252 398 /** @} 253 399 */ 254 -
uspace/lib/posix/stdlib/strtold.c
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Backend for floating point conversions. 33 33 */ 34 34 … … 55 55 #endif 56 56 57 // TODO: clean up , documentation57 // TODO: clean up 58 58 59 59 // FIXME: ensure it builds and works on all platforms … … 116 116 }; 117 117 118 /** 119 * Decides whether the argument is still in range representable by 120 * long double or not. 121 * 122 * @param num Floating point number to be checked. 123 * @return True if the argument is out of range, false otherwise. 124 */ 118 125 static inline bool out_of_range(long double num) 119 126 { … … 127 134 * @param base Number to be multiplied. 128 135 * @param exponent Base 5 exponent. 129 * @return base multiplied by 5**exponent 136 * @return base multiplied by 5**exponent. 130 137 */ 131 138 static long double mul_pow5(long double base, int exponent) … … 173 180 * @param base Number to be multiplied. 174 181 * @param exponent Base 2 exponent. 175 * @return base multiplied by 2**exponent 182 * @return base multiplied by 2**exponent. 176 183 */ 177 184 static long double mul_pow2(long double base, int exponent) … … 212 219 } 213 220 214 221 /** 222 * Convert decimal string representation of the floating point number. 223 * Function expects the string pointer to be already pointed at the first 224 * digit (i.e. leading optional sign was already consumed by the caller). 225 * 226 * @param sptr Pointer to the storage of the string pointer. Upon successful 227 * conversion, the string pointer is updated to point to the first 228 * unrecognized character. 229 * @return An approximate representation of the input floating-point number. 230 */ 215 231 static long double parse_decimal(const char **sptr) 216 232 { … … 315 331 } 316 332 333 /** 334 * Derive a hexadecimal digit from its character representation. 335 * 336 * @param ch Character representation of the hexadecimal digit. 337 * @return Digit value represented by an integer. 338 */ 317 339 static inline int hex_value(char ch) 318 340 { … … 325 347 326 348 /** 349 * Get the count of leading zero bits up to the maximum of 3 zero bits. 350 * 327 351 * @param val Integer value. 328 352 * @return How many leading zero bits there are. (Maximum is 3) … … 339 363 } 340 364 365 /** 366 * Convert hexadecimal string representation of the floating point number. 367 * Function expects the string pointer to be already pointed at the first 368 * digit (i.e. leading optional sign and 0x prefix were already consumed 369 * by the caller). 370 * 371 * @param sptr Pointer to the storage of the string pointer. Upon successful 372 * conversion, the string pointer is updated to point to the first 373 * unrecognized character. 374 * @return Representation of the input floating-point number. 375 */ 341 376 static long double parse_hexadecimal(const char **sptr) 342 377 { … … 478 513 * @param nptr Input string. 479 514 * @param endptr If non-NULL, *endptr is set to the position of the first 480 * unrecognized character.515 * unrecognized character. 481 516 * @return An approximate representation of the input floating-point number. 482 517 */ … … 512 547 513 548 if (endptr != NULL) { 514 *endptr = (char *) &nptr[i + 3];515 } 516 errno = E RANGE;517 return negative ? -0.0l : +0.0l;549 *endptr = (char *) nptr; 550 } 551 errno = EINVAL; 552 return 0; 518 553 } 519 554 … … 567 602 /** @} 568 603 */ 569 -
uspace/lib/posix/string.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file String manipulation. 34 34 */ 35 35 … … 48 48 49 49 /** 50 * Returns true ifs2 is a prefix of s1.51 * 52 * @param s1 53 * @param s2 54 * @return 50 * Decides whether s2 is a prefix of s1. 51 * 52 * @param s1 String in which to look for a prefix. 53 * @param s2 Prefix string to look for. 54 * @return True if s2 is a prefix of s1, false otherwise. 55 55 */ 56 56 static bool begins_with(const char *s1, const char *s2) … … 69 69 * if no occurence is found. 70 70 * 71 * @param s1 72 * @param s2 73 * @return 71 * @param s1 String in which to look for the bytes. 72 * @param s2 String of bytes to look for. 73 * @return Pointer to the found byte on success, pointer to the 74 * string terminator otherwise. 74 75 */ 75 76 static char *strpbrk_null(const char *s1, const char *s2) … … 83 84 84 85 /** 85 * 86 * @param dest 87 * @param src 88 * @return 89 */ 90 char *posix_strcpy(char *dest, const char *src) 86 * Copy a string. 87 * 88 * @param dest Destination pre-allocated buffer. 89 * @param src Source string to be copied. 90 * @return Pointer to the destination buffer. 91 */ 92 char *posix_strcpy(char *restrict dest, const char *restrict src) 91 93 { 92 94 posix_stpcpy(dest, src); … … 95 97 96 98 /** 97 * 98 * @param dest 99 * @param src 100 * @param n 101 * @return 102 */ 103 char *posix_strncpy(char *dest, const char *src, size_t n) 99 * Copy fixed length string. 100 * 101 * @param dest Destination pre-allocated buffer. 102 * @param src Source string to be copied. 103 * @param n Number of bytes to be stored into destination buffer. 104 * @return Pointer to the destination buffer. 105 */ 106 char *posix_strncpy(char *restrict dest, const char *restrict src, size_t n) 104 107 { 105 108 posix_stpncpy(dest, src, n); … … 108 111 109 112 /** 110 * 111 * @param dest 112 * @param src 113 * @return Pointer to the nul character in the dest string 113 * Copy a string. 114 * 115 * @param dest Destination pre-allocated buffer. 116 * @param src Source string to be copied. 117 * @return Pointer to the nul character in the destination string. 114 118 */ 115 119 char *posix_stpcpy(char *restrict dest, const char *restrict src) … … 132 136 133 137 /** 134 * 135 * @param dest 136 * @param src 137 * @param n 138 * @return Pointer to the first written nul character or &dest[n] 138 * Copy fixed length string. 139 * 140 * @param dest Destination pre-allocated buffer. 141 * @param src Source string to be copied. 142 * @param n Number of bytes to be stored into destination buffer. 143 * @return Pointer to the first written nul character or &dest[n]. 139 144 */ 140 145 char *posix_stpncpy(char *restrict dest, const char *restrict src, size_t n) … … 162 167 163 168 /** 164 * 165 * @param dest 166 * @param src 167 * @return 168 */ 169 char *posix_strcat(char *dest, const char *src) 169 * Concatenate two strings. 170 * 171 * @param dest String to which src shall be appended. 172 * @param src String to be appended after dest. 173 * @return Pointer to destination buffer. 174 */ 175 char *posix_strcat(char *restrict dest, const char *restrict src) 170 176 { 171 177 assert(dest != NULL); … … 177 183 178 184 /** 179 * 180 * @param dest 181 * @param src 182 * @param n 183 * @return 184 */ 185 char *posix_strncat(char *dest, const char *src, size_t n) 185 * Concatenate a string with part of another. 186 * 187 * @param dest String to which part of src shall be appended. 188 * @param src String whose part shall be appended after dest. 189 * @param n Number of bytes to append after dest. 190 * @return Pointer to destination buffer. 191 */ 192 char *posix_strncat(char *restrict dest, const char *restrict src, size_t n) 186 193 { 187 194 assert(dest != NULL); … … 195 202 196 203 /** 197 * 198 * @param dest 199 * @param src 200 * @param c 201 * @param n 204 * Copy limited number of bytes in memory. 205 * 206 * @param dest Destination buffer. 207 * @param src Source buffer. 208 * @param c Character after which the copying shall stop. 209 * @param n Number of bytes that shall be copied if not stopped earlier by c. 202 210 * @return Pointer to the first byte after c in dest if found, NULL otherwise. 203 211 */ 204 void *posix_memccpy(void * dest, const void *src, int c, size_t n)212 void *posix_memccpy(void *restrict dest, const void *restrict src, int c, size_t n) 205 213 { 206 214 assert(dest != NULL); … … 223 231 224 232 /** 225 * 226 * @param s 227 * @return Newly allocated string 233 * Duplicate a string. 234 * 235 * @param s String to be duplicated. 236 * @return Newly allocated copy of the string. 228 237 */ 229 238 char *posix_strdup(const char *s) … … 233 242 234 243 /** 235 * 236 * @param s 237 * @param n 238 * @return Newly allocated string of length at most n 244 * Duplicate a specific number of bytes from a string. 245 * 246 * @param s String to be duplicated. 247 * @param n Maximum length of the resulting string.. 248 * @return Newly allocated string copy of length at most n. 239 249 */ 240 250 char *posix_strndup(const char *s, size_t n) … … 255 265 256 266 /** 257 * 258 * @param mem1 259 * @param mem2 260 * @param n 267 * Compare bytes in memory. 268 * 269 * @param mem1 First area of memory to be compared. 270 * @param mem2 Second area of memory to be compared. 271 * @param n Maximum number of bytes to be compared. 261 272 * @return Difference of the first pair of inequal bytes, 262 * or 0 if areas have the same content 273 * or 0 if areas have the same content. 263 274 */ 264 275 int posix_memcmp(const void *mem1, const void *mem2, size_t n) … … 272 283 for (size_t i = 0; i < n; ++i) { 273 284 if (s1[i] != s2[i]) { 274 return s 2[i] - s1[i];285 return s1[i] - s2[i]; 275 286 } 276 287 } … … 280 291 281 292 /** 282 * 283 * @param s1 284 * @param s2 285 * @return 293 * Compare two strings. 294 * 295 * @param s1 First string to be compared. 296 * @param s2 Second string to be compared. 297 * @return Difference of the first pair of inequal characters, 298 * or 0 if strings have the same content. 286 299 */ 287 300 int posix_strcmp(const char *s1, const char *s2) … … 294 307 295 308 /** 296 * 297 * @param s1 298 * @param s2 299 * @param n 300 * @return 309 * Compare part of two strings. 310 * 311 * @param s1 First string to be compared. 312 * @param s2 Second string to be compared. 313 * @param n Maximum number of characters to be compared. 314 * @return Difference of the first pair of inequal characters, 315 * or 0 if strings have the same content. 301 316 */ 302 317 int posix_strncmp(const char *s1, const char *s2, size_t n) … … 307 322 for (size_t i = 0; i < n; ++i) { 308 323 if (s1[i] != s2[i]) { 309 return s 2[i] - s1[i];324 return s1[i] - s2[i]; 310 325 } 311 326 if (s1[i] == '\0') { … … 318 333 319 334 /** 320 * 321 * @param mem 322 * @param c 323 * @param n 324 * @return 335 * Find byte in memory. 336 * 337 * @param mem Memory area in which to look for the byte. 338 * @param c Byte to look for. 339 * @param n Maximum number of bytes to be inspected. 340 * @return Pointer to the specified byte on success, 341 * NULL pointer otherwise. 325 342 */ 326 343 void *posix_memchr(const void *mem, int c, size_t n) … … 339 356 340 357 /** 341 * 342 * @param s 343 * @param c 344 * @return 358 * Scan string for a first occurence of a character. 359 * 360 * @param s String in which to look for the character. 361 * @param c Character to look for. 362 * @return Pointer to the specified character on success, 363 * NULL pointer otherwise. 345 364 */ 346 365 char *posix_strchr(const char *s, int c) … … 353 372 354 373 /** 355 * 356 * @param s 357 * @param c 358 * @return 374 * Scan string for a last occurence of a character. 375 * 376 * @param s String in which to look for the character. 377 * @param c Character to look for. 378 * @return Pointer to the specified character on success, 379 * NULL pointer otherwise. 359 380 */ 360 381 char *posix_strrchr(const char *s, int c) … … 376 397 } 377 398 399 /** 400 * Scan string for a first occurence of a character. 401 * 402 * @param s String in which to look for the character. 403 * @param c Character to look for. 404 * @return Pointer to the specified character on success, pointer to the 405 * string terminator otherwise. 406 */ 378 407 char *gnu_strchrnul(const char *s, int c) 379 408 { … … 388 417 389 418 /** 390 * 391 * @param s1 392 * @param s2 393 * @return 419 * Scan a string for a first occurence of one of provided bytes. 420 * 421 * @param s1 String in which to look for the bytes. 422 * @param s2 String of bytes to look for. 423 * @return Pointer to the found byte on success, 424 * NULL pointer otherwise. 394 425 */ 395 426 char *posix_strpbrk(const char *s1, const char *s2) … … 403 434 404 435 /** 405 * 406 * @param s1 407 * @param s2 408 * @return 436 * Get the length of a complementary substring. 437 * 438 * @param s1 String that shall be searched for complementary prefix. 439 * @param s2 String of bytes that shall not occur in the prefix. 440 * @return Length of the prefix. 409 441 */ 410 442 size_t posix_strcspn(const char *s1, const char *s2) … … 418 450 419 451 /** 420 * 421 * @param s1 422 * @param s2 423 * @return 452 * Get length of a substring. 453 * 454 * @param s1 String that shall be searched for prefix. 455 * @param s2 String of bytes that the prefix must consist of. 456 * @return Length of the prefix. 424 457 */ 425 458 size_t posix_strspn(const char *s1, const char *s2) … … 438 471 439 472 /** 440 * 441 * @param s1 442 * @param s2 443 * @return 473 * Find a substring. 474 * 475 * @param s1 String in which to look for a substring. 476 * @param s2 Substring to look for. 477 * @return Pointer to the first character of the substring in s1, or NULL if 478 * not found. 444 479 */ 445 480 char *posix_strstr(const char *s1, const char *s2) … … 467 502 468 503 /** 504 * String comparison using collating information. 505 * 469 506 * Currently ignores locale and just calls strcmp. 470 507 * 471 * @param s1 472 * @param s2 473 * @return 508 * @param s1 First string to be compared. 509 * @param s2 Second string to be compared. 510 * @return Difference of the first pair of inequal characters, 511 * or 0 if strings have the same content. 474 512 */ 475 513 int posix_strcoll(const char *s1, const char *s2) … … 482 520 483 521 /** 484 * strcoll is equal to strcmp here, so this just makes a copy. 485 * 486 * @param s1 487 * @param s2 488 * @param n 489 * @return 490 */ 491 size_t posix_strxfrm(char *s1, const char *s2, size_t n) 522 * Transform a string in such a way that the resulting string yields the same 523 * results when passed to the strcmp as if the original string is passed to 524 * the strcoll. 525 * 526 * Since strcoll is equal to strcmp here, this just makes a copy. 527 * 528 * @param s1 Transformed string. 529 * @param s2 Original string. 530 * @param n Maximum length of the transformed string. 531 * @return Length of the transformed string. 532 */ 533 size_t posix_strxfrm(char *restrict s1, const char *restrict s2, size_t n) 492 534 { 493 535 assert(s1 != NULL || n == 0); … … 504 546 505 547 /** 506 * 507 * @param errnum 508 * @return 548 * Get error message string. 549 * 550 * @param errnum Error code for which to obtain human readable string. 551 * @return Error message. 509 552 */ 510 553 char *posix_strerror(int errnum) … … 518 561 519 562 /** 520 * 521 * @param errnum Error code 522 * @param buf Buffer to store a human readable string to 523 * @param bufsz Size of buffer pointed to by buf 524 * @return 563 * Get error message string. 564 * 565 * @param errnum Error code for which to obtain human readable string. 566 * @param buf Buffer to store a human readable string to. 567 * @param bufsz Size of buffer pointed to by buf. 568 * @return Zero on success, errno otherwise. 525 569 */ 526 570 int posix_strerror_r(int errnum, char *buf, size_t bufsz) … … 541 585 542 586 /** 543 * 544 * @param s 545 * @return 587 * Get length of the string. 588 * 589 * @param s String which length shall be determined. 590 * @return Length of the string. 546 591 */ 547 592 size_t posix_strlen(const char *s) … … 553 598 554 599 /** 555 * 556 * @param s 557 * @param n 558 * @return 600 * Get limited length of the string. 601 * 602 * @param s String which length shall be determined. 603 * @param n Maximum number of bytes that can be examined to determine length. 604 * @return The lower of either string length or n limit. 559 605 */ 560 606 size_t posix_strnlen(const char *s, size_t n) … … 573 619 574 620 /** 575 * 576 * @param signum 577 * @return 621 * Get description of a signal. 622 * 623 * @param signum Signal number. 624 * @return Human readable signal description. 578 625 */ 579 626 char *posix_strsignal(int signum) -
uspace/lib/posix/string.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file String manipulation. 34 34 */ 35 35 … … 103 103 extern size_t posix_strnlen(const char *s, size_t n); 104 104 105 /* Signal messages */105 /* Signal Messages */ 106 106 extern char *posix_strsignal(int signum); 107 107 108 /* Legacy declarations */108 /* Legacy Declarations */ 109 109 #ifndef POSIX_STRINGS_H_ 110 110 extern int posix_ffs(int i); -
uspace/lib/posix/strings.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Additional string manipulation. 34 34 */ 35 35 … … 45 45 46 46 /** 47 * Find first set bit (beginning with the least significant bit). 47 48 * 48 * @param i 49 * @return 49 * @param i Integer in which to look for the first set bit. 50 * @return Index of first set bit. Bits are numbered starting at one. 50 51 */ 51 52 int posix_ffs(int i) … … 82 83 83 84 /** 85 * Compare two strings (case-insensitive). 84 86 * 85 * @param s1 86 * @param s2 87 * @return 87 * @param s1 First string to be compared. 88 * @param s2 Second string to be compared. 89 * @return Difference of the first pair of inequal characters, 90 * or 0 if strings have the same content. 88 91 */ 89 92 int posix_strcasecmp(const char *s1, const char *s2) … … 93 96 94 97 /** 98 * Compare part of two strings (case-insensitive). 95 99 * 96 * @param s1 97 * @param s2 98 * @param n 99 * @return 100 * @param s1 First string to be compared. 101 * @param s2 Second string to be compared. 102 * @param n Maximum number of characters to be compared. 103 * @return Difference of the first pair of inequal characters, 104 * or 0 if strings have the same content. 100 105 */ 101 106 int posix_strncasecmp(const char *s1, const char *s2, size_t n) … … 116 121 117 122 /** 123 * Compare two memory areas. 118 124 * 119 * @param mem1 120 * @param mem2 121 * @param n 122 * @return 125 * @param mem1 Pointer to the first area to compare. 126 * @param mem2 Pointer to the second area to compare. 127 * @param n Common size of both areas. 128 * @return If n is 0, return zero. If the areas match, return 129 * zero. Otherwise return non-zero. 123 130 */ 124 131 int posix_bcmp(const void *mem1, const void *mem2, size_t n) … … 128 135 129 136 /** 137 * Copy bytes in memory with overlapping areas. 130 138 * 131 * @param dest132 * @param src133 * @param n 139 * @param src Source area. 140 * @param dest Destination area. 141 * @param n Number of bytes to copy. 134 142 */ 135 void posix_bcopy(const void * dest, void *src, size_t n)143 void posix_bcopy(const void *src, void *dest, size_t n) 136 144 { 137 145 /* Note that memmove has different order of arguments. */ 138 memmove( src, dest, n);146 memmove(dest, src, n); 139 147 } 140 148 141 149 /** 150 * Reset bytes in memory area to zero. 142 151 * 143 * @param mem 144 * @param n 152 * @param mem Memory area to be zeroed. 153 * @param n Number of bytes to reset. 145 154 */ 146 155 void posix_bzero(void *mem, size_t n) … … 150 159 151 160 /** 161 * Scan string for a first occurence of a character. 152 162 * 153 * @param s 154 * @param c 155 * @return 163 * @param s String in which to look for the character. 164 * @param c Character to look for. 165 * @return Pointer to the specified character on success, 166 * NULL pointer otherwise. 156 167 */ 157 168 char *posix_index(const char *s, int c) … … 161 172 162 173 /** 163 * 164 * @param s 165 * @param c 166 * @return 174 * Scan string for a last occurence of a character. 175 * 176 * @param s String in which to look for the character. 177 * @param c Character to look for. 178 * @return Pointer to the specified character on success, 179 * NULL pointer otherwise. 167 180 */ 168 181 char *posix_rindex(const char *s, int c) -
uspace/lib/posix/strings.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Additional string manipulation. 34 34 */ 35 35 … … 37 37 #define POSIX_STRINGS_H_ 38 38 39 /* Search Functions */ 39 40 #ifndef POSIX_STRING_H_ 40 /* Search Functions */41 41 extern int posix_ffs(int i); 42 42 #endif … … 56 56 /* Legacy Functions */ 57 57 extern int posix_bcmp(const void *mem1, const void *mem2, size_t n); 58 extern void posix_bcopy(const void * dest, void *src, size_t n);58 extern void posix_bcopy(const void *src, void *dest, size_t n); 59 59 extern void posix_bzero(void *mem, size_t n); 60 60 extern char *posix_index(const char *s, int c); -
uspace/lib/posix/sys/mman.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Memory management declarations. 33 33 */ 34 34 -
uspace/lib/posix/sys/stat.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file File status handling. 34 34 */ 35 35 … … 80 80 int rc = fstat(fd, &hst); 81 81 if (rc < 0) { 82 /* fstat() returns negative error code instead of using errno. 83 */ 82 /* fstat() returns negative error code instead of using errno. */ 84 83 errno = -rc; 85 84 return -1; … … 96 95 * @return Zero on success, -1 otherwise. 97 96 */ 98 int posix_lstat(const char * path, struct posix_stat *st)97 int posix_lstat(const char *restrict path, struct posix_stat *restrict st) 99 98 { 100 99 /* There are currently no symbolic links in HelenOS. */ … … 109 108 * @return Zero on success, -1 otherwise. 110 109 */ 111 int posix_stat(const char * path, struct posix_stat *st)110 int posix_stat(const char *restrict path, struct posix_stat *restrict st) 112 111 { 113 112 struct stat hst; 114 113 int rc = stat(path, &hst); 115 114 if (rc < 0) { 116 /* stat() returns negative error code instead of using errno. 117 */ 115 /* stat() returns negative error code instead of using errno. */ 118 116 errno = -rc; 119 117 return -1; -
uspace/lib/posix/sys/stat.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file File status handling. 34 34 */ 35 35 -
uspace/lib/posix/sys/types.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Data types definitions. 34 34 */ 35 35 … … 49 49 typedef sysarg_t posix_dev_t; 50 50 51 /* PThread types */51 /* PThread Types */ 52 52 typedef struct posix_thread_attr posix_thread_attr_t; 53 53 54 /* Clock types */54 /* Clock Types */ 55 55 typedef long posix_clock_t; 56 56 typedef int posix_clockid_t; -
uspace/lib/posix/sys/wait.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Support for waiting. 34 34 */ 35 35 … … 65 65 /** @} 66 66 */ 67 -
uspace/lib/posix/sys/wait.h
rdf0956ee reccd20e6 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Support for waiting. 33 33 */ 34 34 -
uspace/lib/posix/time.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Time measurement support. 34 34 */ 35 35 … … 63 63 #define SECS_PER_DAY (SECS_PER_HOUR * HOURS_PER_DAY) 64 64 65 /** 66 * 67 * @param year 68 * @return 69 */ 65 70 static bool _is_leap_year(time_t year) 66 71 { … … 76 81 } 77 82 83 /** 84 * 85 * @param year 86 * @param mon 87 * @return 88 */ 78 89 static int _days_in_month(time_t year, time_t mon) 79 90 { … … 92 103 } 93 104 105 /** 106 * 107 * @param year 108 * @param mon 109 * @param mday 110 * @return 111 */ 94 112 static int _day_of_year(time_t year, time_t mon, time_t mday) 95 113 { … … 102 120 } 103 121 104 /* Integer division that rounds to negative infinity. 122 /** 123 * Integer division that rounds to negative infinity. 124 * 125 * @param op1 126 * @param op2 127 * @return 105 128 */ 106 129 static time_t _floor_div(time_t op1, time_t op2) … … 113 136 } 114 137 115 /* Modulo that rounds to negative infinity. 138 /** 139 * Modulo that rounds to negative infinity. 140 * 141 * @param op1 142 * @param op2 143 * @return 116 144 */ 117 145 static time_t _floor_mod(time_t op1, time_t op2) … … 132 160 } 133 161 162 /** 163 * 164 * @param year 165 * @param mon 166 * @param mday 167 * @return 168 */ 134 169 static time_t _days_since_epoch(time_t year, time_t mon, time_t mday) 135 170 { … … 139 174 } 140 175 141 /* Assumes normalized broken-down time. */ 176 /** 177 * Assumes normalized broken-down time. 178 * 179 * @param tm 180 * @return 181 */ 142 182 static time_t _secs_since_epoch(const struct posix_tm *tm) 143 183 { … … 147 187 } 148 188 189 /** 190 * 191 * @param year 192 * @param mon 193 * @param mday 194 * @return 195 */ 149 196 static int _day_of_week(time_t year, time_t mon, time_t mday) 150 197 { … … 165 212 }; 166 213 214 /** 215 * 216 * @param ltm 217 * @param ptm 218 */ 167 219 static void _posix_to_long_tm(struct _long_tm *ltm, struct posix_tm *ptm) 168 220 { … … 179 231 } 180 232 233 /** 234 * 235 * @param ptm 236 * @param ltm 237 */ 181 238 static void _long_to_posix_tm(struct posix_tm *ptm, struct _long_tm *ltm) 182 239 { … … 196 253 } 197 254 255 /** 256 * 257 * @param tm 258 */ 198 259 static void _normalize_time(struct _long_tm *tm) 199 260 { … … 241 302 } 242 303 243 /* Which day the week-based year starts on relative to the first calendar day. 304 /** 305 * Which day the week-based year starts on relative to the first calendar day. 244 306 * E.g. if the year starts on December 31st, the return value is -1. 307 * 308 * @param year 309 * @return 245 310 */ 246 311 static int _wbyear_offset(int year) … … 250 315 } 251 316 252 /* Returns week-based year of the specified time. 317 /** 318 * Returns week-based year of the specified time. 253 319 * Assumes normalized broken-down time. 320 * 321 * @param tm 322 * @return 254 323 */ 255 324 static int _wbyear(const struct posix_tm *tm) … … 268 337 } 269 338 270 /** Week number of the year, assuming weeks start on sunday. 271 * The first Sunday of January is the first day of week 1; 272 * days in the new year before this are in week 0. 339 /** 340 * Week number of the year, assuming weeks start on sunday. 341 * The first Sunday of January is the first day of week 1; 342 * days in the new year before this are in week 0. 273 343 * 274 344 * @param tm Normalized broken-down time. … … 281 351 } 282 352 283 /** Week number of the year, assuming weeks start on monday. 284 * If the week containing January 1st has four or more days in the new year, 285 * then it is considered week 1. Otherwise, it is the last week of the previous 286 * year, and the next week is week 1. Both January 4th and the first Thursday 287 * of January are always in week 1. 353 /** 354 * Week number of the year, assuming weeks start on monday. 355 * If the week containing January 1st has four or more days in the new year, 356 * then it is considered week 1. Otherwise, it is the last week of the previous 357 * year, and the next week is week 1. Both January 4th and the first Thursday 358 * of January are always in week 1. 288 359 * 289 360 * @param tm Normalized broken-down time. … … 305 376 } 306 377 307 /** Week number of the year, assuming weeks start on monday. 308 * The first Monday of January is the first day of week 1; 309 * days in the new year before this are in week 0. 378 /** 379 * Week number of the year, assuming weeks start on monday. 380 * The first Monday of January is the first day of week 1; 381 * days in the new year before this are in week 0. 310 382 * 311 383 * @param tm Normalized broken-down time. … … 324 396 char *posix_tzname[2]; 325 397 398 /** 399 * 400 */ 326 401 void posix_tzset(void) 327 402 { … … 333 408 } 334 409 410 /** 411 * 412 * @param time1 413 * @param time0 414 * @return 415 */ 335 416 double posix_difftime(time_t time1, time_t time0) 336 417 { … … 338 419 } 339 420 340 /** This function first normalizes the provided broken-down time 341 * (moves all values to their proper bounds) and then tries to 342 * calculate the appropriate time_t representation. 343 * 344 * @param timeptr Broken-down time. 421 /** 422 * This function first normalizes the provided broken-down time 423 * (moves all values to their proper bounds) and then tries to 424 * calculate the appropriate time_t representation. 425 * 426 * @param tm Broken-down time. 345 427 * @return time_t representation of the time, undefined value on overflow 346 428 */ … … 358 440 } 359 441 442 /** 443 * 444 * @param timer 445 * @return 446 */ 360 447 struct posix_tm *posix_gmtime(const time_t *timer) 361 448 { … … 364 451 } 365 452 453 /** 454 * 455 * @param timer 456 * @param result 457 * @return 458 */ 366 459 struct posix_tm *posix_gmtime_r(const time_t *restrict timer, 367 460 struct posix_tm *restrict result) … … 394 487 /** 395 488 * 396 * @param time p489 * @param timer 397 490 * @return 398 491 */ … … 403 496 } 404 497 498 /** 499 * 500 * @param timer 501 * @param result 502 * @return 503 */ 405 504 struct posix_tm *posix_localtime_r(const time_t *restrict timer, 406 505 struct posix_tm *restrict result) … … 413 512 /** 414 513 * 415 * @param t m514 * @param timeptr 416 515 * @return 417 516 */ … … 422 521 } 423 522 523 /** 524 * 525 * @param timeptr 526 * @param buf 527 * @return 528 */ 424 529 char *posix_asctime_r(const struct posix_tm *restrict timeptr, 425 530 char *restrict buf) … … 448 553 /** 449 554 * 450 * @param time p555 * @param timer 451 556 * @return 452 557 */ … … 460 565 } 461 566 567 /** 568 * 569 * @param timer 570 * @param buf 571 * @return 572 */ 462 573 char *posix_ctime_r(const time_t *timer, char *buf) 463 574 { … … 477 588 * @return 478 589 */ 479 size_t posix_strftime(char * s, size_t maxsize,480 const char * format, const struct posix_tm *tm)590 size_t posix_strftime(char *restrict s, size_t maxsize, 591 const char *restrict format, const struct posix_tm *restrict tm) 481 592 { 482 593 // TODO: use locale … … 655 766 } 656 767 768 /** 769 * 770 * @param s 771 * @param maxsize 772 * @param format 773 * @param tm 774 * @param loc 775 * @return 776 */ 777 extern size_t posix_strftime_l(char *restrict s, size_t maxsize, 778 const char *restrict format, const struct posix_tm *restrict tm, 779 posix_locale_t loc) 780 { 781 // TODO 782 not_implemented(); 783 } 784 785 /** 786 * 787 * @param clock_id 788 * @param res 789 * @return 790 */ 657 791 int posix_clock_getres(posix_clockid_t clock_id, struct posix_timespec *res) 658 792 { … … 670 804 } 671 805 806 /** 807 * 808 * @param clock_id 809 * @param tp 810 * @return 811 */ 672 812 int posix_clock_gettime(posix_clockid_t clock_id, struct posix_timespec *tp) 673 813 { … … 688 828 } 689 829 830 /** 831 * 832 * @param clock_id 833 * @param tp 834 * @return 835 */ 690 836 int posix_clock_settime(posix_clockid_t clock_id, 691 837 const struct posix_timespec *tp) … … 706 852 } 707 853 854 /** 855 * 856 * @param clock_id 857 * @param flags 858 * @param rqtp 859 * @param rmtp 860 * @return 861 */ 708 862 int posix_clock_nanosleep(posix_clockid_t clock_id, int flags, 709 863 const struct posix_timespec *rqtp, struct posix_timespec *rmtp) … … 735 889 }; 736 890 891 /** 892 * 893 * @param clockid 894 * @param evp 895 * @param timerid 896 * @return 897 */ 737 898 int posix_timer_create(posix_clockid_t clockid, 738 899 struct posix_sigevent *restrict evp, … … 743 904 } 744 905 906 /** 907 * 908 * @param timerid 909 * @return 910 */ 745 911 int posix_timer_delete(posix_timer_t timerid) 746 912 { … … 749 915 } 750 916 917 /** 918 * 919 * @param timerid 920 * @return 921 */ 751 922 int posix_timer_getoverrun(posix_timer_t timerid) 752 923 { … … 755 926 } 756 927 928 /** 929 * 930 * @param timerid 931 * @param value 932 * @return 933 */ 757 934 int posix_timer_gettime(posix_timer_t timerid, 758 935 struct posix_itimerspec *value) … … 762 939 } 763 940 941 /** 942 * 943 * @param timerid 944 * @param flags 945 * @param value 946 * @param ovalue 947 * @return 948 */ 764 949 int posix_timer_settime(posix_timer_t timerid, int flags, 765 950 const struct posix_itimerspec *restrict value, … … 783 968 if (task_stats) { 784 969 total_cycles = (posix_clock_t) (task_stats->kcycles + task_stats->ucycles); 785 }786 free(task_stats);787 task_stats = 0;970 free(task_stats); 971 task_stats = 0; 972 } 788 973 789 974 return total_cycles; -
uspace/lib/posix/time.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Time measurement support. 34 34 */ 35 35 … … 94 94 95 95 /* Timezones */ 96 97 96 extern int posix_daylight; 98 97 extern long posix_timezone; 99 98 extern char *posix_tzname[2]; 100 101 99 extern void posix_tzset(void); 102 100 103 /* time_t */ 104 101 /* Elapsed Time */ 105 102 extern double posix_difftime(time_t time1, time_t time0); 106 103 107 104 /* Broken-down Time */ 108 extern time_t posix_mktime(struct posix_tm *t imeptr);105 extern time_t posix_mktime(struct posix_tm *tm); 109 106 extern struct posix_tm *posix_gmtime(const time_t *timer); 110 107 extern struct posix_tm *posix_gmtime_r(const time_t *restrict timer, … … 120 117 extern char *posix_ctime(const time_t *timer); 121 118 extern char *posix_ctime_r(const time_t *timer, char *buf); 122 123 119 extern size_t posix_strftime(char *restrict s, size_t maxsize, 124 120 const char *restrict format, const struct posix_tm *restrict tm); 125 126 121 extern size_t posix_strftime_l(char *restrict s, size_t maxsize, 127 122 const char *restrict format, const struct posix_tm *restrict tm, 128 123 posix_locale_t loc); 129 124 130 /* Clocks. */ 131 125 /* Clocks */ 132 126 extern int posix_clock_getres(posix_clockid_t clock_id, 133 127 struct posix_timespec *res); … … 139 133 const struct posix_timespec *rqtp, struct posix_timespec *rmtp); 140 134 141 /* Timers. */142 143 135 #if 0 144 136 137 /* Timers */ 145 138 extern int posix_timer_create(posix_clockid_t clockid, 146 139 struct posix_sigevent *restrict evp, … … 159 152 extern posix_clock_t posix_clock(void); 160 153 161 162 154 #ifndef LIBPOSIX_INTERNAL 163 155 #define tm posix_tm 164 165 156 #define timespec posix_timespec 166 157 #define itimerspec posix_itimerspec 167 158 #define timer_t posix_timer_t 168 159 160 #define daylight posix_daylight 161 #define timezone posix_timezone 162 #define tzname posix_tzname 163 #define tzset posix_tzset 164 169 165 #define difftime posix_difftime 166 170 167 #define mktime posix_mktime 171 168 #define gmtime posix_gmtime … … 174 171 #define localtime_r posix_localtime_r 175 172 176 #define daylight posix_daylight177 #define timezone posix_timezone178 #define tzname posix_tzname179 #define tzset posix_tzset180 181 173 #define asctime posix_asctime 182 174 #define asctime_r posix_asctime_r … … 184 176 #define ctime_r posix_ctime_r 185 177 #define strftime posix_strftime 178 #define strftime_l posix_strftime_l 186 179 187 180 #define clock_getres posix_clock_getres -
uspace/lib/posix/unistd.c
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Miscellaneous standard definitions. 34 34 */ 35 35 … … 90 90 /* Always returns false, because there is no easy way to find 91 91 * out under HelenOS. */ 92 return false;92 return 0; 93 93 } 94 94 … … 207 207 /* Check file existence by attempt to open it. */ 208 208 int fd = open(path, O_RDONLY); 209 if (fd < 0) { 210 /* FIXME: open() returns error code as negative retval. */ 211 errno = -fd; 212 fd = -1; 213 } else { 209 if (fd != -1) { 214 210 close(fd); 215 211 } … … 239 235 clk_tck = ((long) cpu_stats[0].frequency_mhz) * 1000000L; 240 236 } 241 free(cpu_stats); 242 cpu_stats = 0; 237 if (cpu_stats) { 238 free(cpu_stats); 239 cpu_stats = 0; 240 } 243 241 244 242 long phys_pages = 0; … … 248 246 phys_pages = (long) (mem_stats->total / getpagesize()); 249 247 avphys_pages = (long) (mem_stats->free / getpagesize()); 250 }251 free(mem_stats);252 mem_stats = 0;248 free(mem_stats); 249 mem_stats = 0; 250 } 253 251 254 252 switch (name) { -
uspace/lib/posix/unistd.h
rdf0956ee reccd20e6 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Miscellaneous standard definitions. 34 34 */ 35 35
Note:
See TracChangeset
for help on using the changeset viewer.
