Changeset 087c8798 in mainline
- Timestamp:
- 2011-07-20T19:30:30Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 102a729
- Parents:
- fc3680e
- Location:
- uspace/lib/posix
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/stdlib.c
rfc3680e r087c8798 31 31 * @{ 32 32 */ 33 /** @file 33 /** @file Standard library definitions. 34 34 */ 35 35 … … 59 59 60 60 /** 61 * Integer absolute value. 61 62 * 62 63 * @param i Input value. … … 69 70 70 71 /** 72 * Long integer absolute value. 71 73 * 72 74 * @param i Input value. … … 79 81 80 82 /** 83 * Long long integer absolute value. 81 84 * 82 85 * @param i Input value. … … 88 91 } 89 92 93 /** 94 * Compute the quotient and remainder of an integer division. 95 * 96 * @param numer Numerator. 97 * @param denom Denominator. 98 * @return Quotient and remainder packed into structure. 99 */ 90 100 posix_div_t posix_div(int numer, int denom) 91 101 { … … 93 103 } 94 104 105 /** 106 * Compute the quotient and remainder of a long integer division. 107 * 108 * @param numer Numerator. 109 * @param denom Denominator. 110 * @return Quotient and remainder packed into structure. 111 */ 95 112 posix_ldiv_t posix_ldiv(long numer, long denom) 96 113 { … … 98 115 } 99 116 117 /** 118 * Compute the quotient and remainder of a long long integer division. 119 * 120 * @param numer Numerator. 121 * @param denom Denominator. 122 * @return Quotient and remainder packed into structure. 123 */ 100 124 posix_lldiv_t posix_lldiv(long long numer, long long denom) 101 125 { … … 109 133 * @param elem2 Second element to compare. 110 134 * @param compare Comparison function without userdata parameter. 111 *112 135 * @return Relative ordering of the elements. 113 136 */ … … 121 144 * Array sorting utilizing the quicksort algorithm. 122 145 * 123 * @param array 124 * @param count 125 * @param size 126 * @param compare 146 * @param array Array of elements to sort. 147 * @param count Number of elements in the array. 148 * @param size Width of each element. 149 * @param compare Decides relative ordering of two elements. 127 150 */ 128 151 void posix_qsort(void *array, size_t count, size_t size, … … 171 194 /** 172 195 * Retrieve a value of the given environment variable. 196 * 173 197 * Since HelenOS doesn't support env variables at the moment, 174 198 * this function always returns NULL. 175 199 * 176 * @param name 177 * @return Always NULL.200 * @param name Name of the variable. 201 * @return Value of the variable or NULL if such variable does not exist. 178 202 */ 179 203 char *posix_getenv(const char *name) … … 195 219 196 220 /** 197 * 198 * @param string String to be passed to a command interpreter. 199 * @return 221 * Issue a command. 222 * 223 * @param string String to be passed to a command interpreter or NULL. 224 * @return Termination status of the command if the command is not NULL, 225 * otherwise indicate whether there is a command interpreter (non-zero) 226 * or not (zero). 200 227 */ 201 228 int posix_system(const char *string) { … … 205 232 206 233 /** 207 * 208 * @param name 209 * @param resolved 210 * @return 211 */ 212 char *posix_realpath(const char *name, char *resolved) 234 * Resolve absolute pathname. 235 * 236 * @param name Pathname to be resolved. 237 * @param resolved Either buffer for the resolved absolute pathname or NULL. 238 * @return On success, either resolved (if it was not NULL) or pointer to the 239 * newly allocated buffer containing the absolute pathname (if resolved was 240 * NULL). Otherwise NULL. 241 * 242 */ 243 char *posix_realpath(const char *restrict name, char *restrict resolved) 213 244 { 214 245 #ifndef PATH_MAX … … 254 285 * its native representation. See posix_strtold(). 255 286 * 256 * @param nptr 257 * @return 287 * @param nptr String representation of a floating-point number. 288 * @return Double-precision number resulting from the string conversion. 258 289 */ 259 290 double posix_atof(const char *nptr) … … 266 297 * its native representation. See posix_strtold(). 267 298 * 268 * @param nptr 269 * @param endptr 270 * @return 299 * @param nptr String representation of a floating-point number. 300 * @param endptr Pointer to the final part of the string which 301 * was not used for conversion. 302 * @return Single-precision number resulting from the string conversion. 271 303 */ 272 304 float posix_strtof(const char *restrict nptr, char **restrict endptr) … … 279 311 * its native representation. See posix_strtold(). 280 312 * 281 * @param nptr 282 * @param endptr 283 * @return 313 * @param nptr String representation of a floating-point number. 314 * @param endptr Pointer to the final part of the string which 315 * was not used for conversion. 316 * @return Double-precision number resulting from the string conversion. 284 317 */ 285 318 double posix_strtod(const char *restrict nptr, char **restrict endptr) … … 289 322 290 323 /** 291 * 292 * @param size 293 * @return 324 * Allocate memory chunk. 325 * 326 * @param size Size of the chunk to allocate. 327 * @return Either pointer to the allocated chunk or NULL if not possible. 294 328 */ 295 329 void *posix_malloc(size_t size) … … 299 333 300 334 /** 301 * 302 * @param nelem 303 * @param elsize 304 * @return 335 * Allocate memory for an array of elements. 336 * 337 * @param nelem Number of elements in the array. 338 * @param elsize Size of each element. 339 * @return Either pointer to the allocated array or NULL if not possible. 305 340 */ 306 341 void *posix_calloc(size_t nelem, size_t elsize) … … 310 345 311 346 /** 312 * 313 * @param ptr 314 * @param size 315 * @return 347 * Reallocate memory chunk to a new size. 348 * 349 * @param ptr Memory chunk to reallocate. Might be NULL. 350 * @param size Size of the reallocated chunk. Might be zero. 351 * @return Either NULL or the pointer to the newly reallocated chunk. 316 352 */ 317 353 void *posix_realloc(void *ptr, size_t size) … … 321 357 322 358 /** 323 * 324 * @param ptr 359 * Free allocated memory chunk. 360 * 361 * @param ptr Memory chunk to be freed. 325 362 */ 326 363 void posix_free(void *ptr) … … 343 380 344 381 /** 345 * Should read system load statistics. Not supported. Always returns -1. 346 * 347 * @param loadavg 348 * @param nelem 349 * @return 382 * Get system load average statistics. 383 * 384 * Not supported. Always returns -1. 385 * 386 * @param loadavg Array where the load averages shall be placed. 387 * @param nelem Maximum number of elements to be placed into the array. 388 * @return Number of elements placed into the array on success, -1 otherwise. 350 389 */ 351 390 int bsd_getloadavg(double loadavg[], int nelem) -
uspace/lib/posix/stdlib.h
rfc3680e r087c8798 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
rfc3680e r087c8798 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Backend for integer conversions. 33 33 */ 34 34 … … 42 42 #include "../errno.h" 43 43 44 // TODO: documentation 45 44 /** 45 * Decides whether a digit belongs to a particular base. 46 * 47 * @param c Character representation of the digit. 48 * @param base Base against which the digit shall be tested. 49 * @return True if the digit belongs to the base, false otherwise. 50 */ 46 51 static inline bool is_digit_in_base(int c, int base) 47 52 { … … 54 59 } 55 60 61 /** 62 * Derive a digit from its character representation. 63 * 64 * @param c Character representation of the digit. 65 * @param base Base into which the digit belongs to. 66 * @return Digit value represented by an integer. 67 */ 56 68 static inline int get_digit_in_base(int c, int base) 57 69 { … … 63 75 } 64 76 77 /** 78 * Backend for all integer conversion functions. Can be configured by arguments 79 * to convert both signed and unsigned integers of various sizes. 80 * 81 * @param nptr Input string. 82 * @param endptr If non-NULL, *endptr is set to the position of the first 83 * unrecognized character. 84 * @param base Expected base of the string representation. 85 * @param min_value Lower bound for the resulting conversion. 86 * @param max_value Upper bound for the resulting conversion. 87 * @param out_negative Either NULL for unsigned conversion or a pointer to the 88 * bool variable into which shall be placed the negativity of the resulting 89 * converted value. 90 * @return Result of the conversion. 91 */ 65 92 static inline unsigned long long internal_strtol( 66 93 const char *restrict nptr, char **restrict endptr, int base, … … 188 215 } 189 216 217 /** 218 * Convert a string to an integer. 219 * 220 * @param nptr Input string. 221 * @return Result of the conversion. 222 */ 190 223 int posix_atoi(const char *nptr) 191 224 { … … 197 230 } 198 231 232 /** 233 * Convert a string to a long integer. 234 * 235 * @param nptr Input string. 236 * @return Result of the conversion. 237 */ 199 238 long posix_atol(const char *nptr) 200 239 { … … 206 245 } 207 246 247 /** 248 * Convert a string to a long long integer. 249 * 250 * @param nptr Input string. 251 * @return Result of the conversion. 252 */ 208 253 long long posix_atoll(const char *nptr) 209 254 { … … 215 260 } 216 261 262 /** 263 * Convert a string to a long integer. 264 * 265 * @param nptr Input string. 266 * @param endptr Pointer to the final part of the string which 267 * was not used for conversion. 268 * @param base Expected base of the string representation. 269 * @return Result of the conversion. 270 */ 217 271 long posix_strtol(const char *restrict nptr, char **restrict endptr, int base) 218 272 { … … 224 278 } 225 279 280 /** 281 * Convert a string to a long long integer. 282 * 283 * @param nptr Input string. 284 * @param endptr Pointer to the final part of the string which 285 * was not used for conversion. 286 * @param base Expected base of the string representation. 287 * @return Result of the conversion. 288 */ 226 289 long long posix_strtoll( 227 290 const char *restrict nptr, char **restrict endptr, int base) … … 234 297 } 235 298 299 /** 300 * Convert a string to an unsigned long integer. 301 * 302 * @param nptr Input string. 303 * @param endptr Pointer to the final part of the string which 304 * was not used for conversion. 305 * @param base Expected base of the string representation. 306 * @return Result of the conversion. 307 */ 236 308 unsigned long posix_strtoul( 237 309 const char *restrict nptr, char **restrict endptr, int base) … … 243 315 } 244 316 317 /** 318 * Convert a string to a an unsigned long long integer. 319 * 320 * @param nptr Input string. 321 * @param endptr Pointer to the final part of the string which 322 * was not used for conversion. 323 * @param base Expected base of the string representation. 324 * @return Result of the conversion. 325 */ 245 326 unsigned long long posix_strtoull( 246 327 const char *restrict nptr, char **restrict endptr, int base) … … 249 330 } 250 331 251 252 332 /** @} 253 333 */ 254 -
uspace/lib/posix/stdlib/strtold.c
rfc3680e r087c8798 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 { … … 567 602 /** @} 568 603 */ 569
Note:
See TracChangeset
for help on using the changeset viewer.