Changeset 0ffbed9 in mainline
- Timestamp:
- 2011-06-19T17:49:29Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5974661
- Parents:
- f48b637 (diff), 32fb6944 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace/lib/posix
- Files:
-
- 12 added
- 18 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/Makefile
rf48b637 r0ffbed9 40 40 SOURCES = \ 41 41 ctype.c \ 42 getopt.c \ 42 43 stdio.c \ 43 44 stdlib.c \ 45 stdlib/strtold.c \ 44 46 string.c \ 45 47 strings.c \ -
uspace/lib/posix/ctype.c
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 36 #define LIBPOSIX_INTERNAL 37 29 38 #include "ctype.h" 30 39 31 int isxdigit(int ch) 40 /** 41 * 42 * @param ch 43 * @return 44 */ 45 int posix_isxdigit(int ch) 32 46 { 33 47 return isdigit(ch) || 34 35 48 (ch >= 'a' && ch <= 'f') || 49 (ch >= 'A' && ch <= 'F'); 36 50 } 37 51 52 /** @} 53 */ -
uspace/lib/posix/ctype.h
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 29 36 #ifndef POSIX_CTYPE_H_ 30 37 #define POSIX_CTYPE_H_ … … 32 39 #include "libc/ctype.h" 33 40 34 extern int isxdigit(int ch); 41 /* Classification of Characters */ 42 extern int posix_isxdigit(int ch); 43 44 #ifndef LIBPOSIX_INTERNAL 45 #define isxdigit posix_isxdigit 46 #endif 35 47 36 48 #endif /* POSIX_CTYPE_H_ */ 37 49 50 /** @} 51 */ -
uspace/lib/posix/internal/common.h
rf48b637 r0ffbed9 27 27 */ 28 28 29 /** @addtogroup libposix 30 * @{ 31 */ 32 /** @file 33 */ 34 29 35 #ifndef LIBPOSIX_COMMON_H_ 30 36 #define LIBPOSIX_COMMON_H_ … … 33 39 #include <stdlib.h> 34 40 35 #define not_implemented() (fprintf(stderr, "Function %s() in file %s at line %d is not implemented\n", __func__, __FILE__, __LINE__), abort()) 41 #define not_implemented() (fprintf(stderr, \ 42 "Function %s() in file %s at line %d is not implemented\n", \ 43 __func__, __FILE__, __LINE__), abort()) 36 44 37 45 #endif /* LIBPOSIX_COMMON_H_ */ 38 46 47 /** @} 48 */ -
uspace/lib/posix/signal.h
rf48b637 r0ffbed9 27 27 */ 28 28 29 /** @addtogroup libposix 30 * @{ 31 */ 32 /** @file 33 */ 34 29 35 #ifndef POSIX_SIGNAL_H_ 30 36 #define POSIX_SIGNAL_H_ 31 37 32 #include <errno.h>38 #include "libc/errno.h" 33 39 34 40 /* HelenOS doesn't have signals, so calls to functions of this header … … 41 47 */ 42 48 49 #undef SIG_DFL 43 50 #define SIG_DFL ((void (*)(int)) 0) 51 #undef SIG_ERR 44 52 #define SIG_ERR ((void (*)(int)) 0) 53 #undef SIG_IGN 45 54 #define SIG_IGN ((void (*)(int)) 0) 46 55 47 56 #define signal(sig,func) (errno = ENOTSUP, SIG_ERR) 48 #define raise(sig) ((int) -1)57 #define raise(sig) ((int) -1) 49 58 50 typedef int sig_atomic_t;59 typedef int posix_sig_atomic_t; 51 60 52 61 /* full POSIX set */ … … 82 91 }; 83 92 93 #ifndef LIBPOSIX_INTERNAL 94 #define sig_atomic_t posix_sig_atomic_t 95 #endif 96 84 97 #endif /* POSIX_SIGNAL_H_ */ 85 98 99 /** @} 100 */ -
uspace/lib/posix/stdio.c
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 33 34 */ 34 35 35 #define POSIX_INTERNAL36 #define LIBPOSIX_INTERNAL 36 37 37 38 #include <assert.h> 38 #include "errno.h" 39 #include "common.h" 39 #include <errno.h> 40 41 #include "internal/common.h" 40 42 #include "stdio.h" 41 43 #include "string.h" 44 42 45 /* not the best of solutions, but freopen will eventually 43 need to be implemented in libc anyway */ 46 * need to be implemented in libc anyway 47 */ 44 48 #include "../c/generic/private/stdio.h" 45 49 46 FILE *posix_freopen(const char *restrict filename, 47 const char *restrict mode, 48 FILE *restrict stream) 50 /** 51 * 52 * @param c 53 * @param stream 54 * @return 55 */ 56 int posix_ungetc(int c, FILE *stream) 57 { 58 // TODO 59 not_implemented(); 60 } 61 62 /** 63 * 64 * @param filename 65 * @param mode 66 * @param stream 67 * @return 68 */ 69 FILE *posix_freopen( 70 const char *restrict filename, 71 const char *restrict mode, 72 FILE *restrict stream) 49 73 { 50 74 assert(mode != NULL); … … 55 79 56 80 /* print error to stderr as well, to avoid hard to find problems 57 with buggy apps that expect this to work */ 58 fprintf(stderr, "ERROR: Application wants to use freopen() to change mode of opened stream.\n" 59 " libposix does not support that yet, the application may function improperly.\n"); 81 * with buggy apps that expect this to work 82 */ 83 fprintf(stderr, 84 "ERROR: Application wants to use freopen() to change mode of opened stream.\n" 85 " libposix does not support that yet, the application may function improperly.\n"); 60 86 errno = ENOTSUP; 61 87 return NULL; … … 68 94 } 69 95 memcpy(copy, stream, sizeof(FILE)); 70 fclose(copy); 96 fclose(copy); /* copy is now freed */ 71 97 72 copy = fopen(filename, mode); 98 copy = fopen(filename, mode); /* open new stream */ 73 99 if (copy == NULL) { 74 100 /* fopen() sets errno */ … … 87 113 } 88 114 115 /** 116 * 117 * @param s 118 */ 89 119 void posix_perror(const char *s) 120 { 121 // TODO 122 not_implemented(); 123 } 124 125 /** 126 * 127 * @param stream 128 * @param offset 129 * @param whence 130 * @return 131 */ 132 int posix_fseeko(FILE *stream, posix_off_t offset, int whence) 133 { 134 // TODO 135 not_implemented(); 136 } 137 138 /** 139 * 140 * @param stream 141 * @return 142 */ 143 posix_off_t posix_ftello(FILE *stream) 144 { 145 // TODO 146 not_implemented(); 147 } 148 149 /** 150 * 151 * @param s 152 * @param format 153 * @param ... 154 * @return 155 */ 156 int posix_sprintf(char *s, const char *format, ...) 157 { 158 // TODO 159 not_implemented(); 160 } 161 162 /** 163 * 164 * @param s 165 * @param format 166 * @param ... 167 * @return 168 */ 169 int posix_sscanf(const char *s, const char *format, ...) 90 170 { 91 171 // TODO … … 95 175 /** @} 96 176 */ 97 -
uspace/lib/posix/stdio.h
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 29 36 #ifndef POSIX_STDIO_H_ 30 37 #define POSIX_STDIO_H_ 31 38 32 39 #include "libc/stdio.h" 40 #include "sys/types.h" 33 41 42 /* Character Input/Output */ 34 43 #define putc fputc 35 44 #define getc fgetc 45 extern int posix_ungetc(int c, FILE *stream); 36 46 47 /* Opening Streams */ 48 extern FILE *posix_freopen( 49 const char *restrict filename, 50 const char *restrict mode, 51 FILE *restrict stream); 37 52 38 extern FILE *posix_freopen(const char *restrict filename, 39 const char *restrict mode, 40 FILE *restrict stream); 41 53 /* Error Messages */ 42 54 extern void posix_perror(const char *s); 43 55 44 #ifndef POSIX_INTERNAL 56 /* File Positioning */ 57 extern int posix_fseeko(FILE *stream, posix_off_t offset, int whence); 58 extern posix_off_t posix_ftello(FILE *stream); 59 60 /* Formatted Input/Output */ 61 extern int posix_sprintf(char *restrict s, const char *restrict format, ...); 62 extern int posix_sscanf(const char *restrict s, const char *restrict format, ...); 63 64 #ifndef LIBPOSIX_INTERNAL 65 #define ungetc posix_ungetc 66 45 67 #define freopen posix_freopen 68 46 69 #define perror posix_perror 70 71 #define fseeko posix_fseeko 72 #define ftello posix_ftello 73 74 #define sprintf posix_sprintf 75 #define sscanf posix_sscanf 47 76 #endif 48 77 49 78 #endif /* POSIX_STDIO_H_ */ 50 79 80 /** @} 81 */ -
uspace/lib/posix/stdlib.c
rf48b637 r0ffbed9 37 37 38 38 #include "stdlib.h" 39 #include " common.h"39 #include "internal/common.h" 40 40 41 41 /** … … 46 46 * @param compare 47 47 */ 48 void posix_qsort(void *array, size_t count, size_t size, int (*compare)(const void *, const void *)) 48 void posix_qsort(void *array, size_t count, size_t size, 49 int (*compare)(const void *, const void *)) 49 50 { 50 51 // TODO … … 76 77 77 78 /** 78 * 79 * Converts a string representation of a floating-point number to 80 * its native representation. See posix_strtold(). 81 * 79 82 * @param nptr 80 83 * @param endptr … … 83 86 float posix_strtof(const char *restrict nptr, char **restrict endptr) 84 87 { 85 // TODO 86 not_implemented(); 88 return (float) posix_strtold(nptr, endptr); 87 89 } 88 90 89 91 /** 90 * 92 * Converts a string representation of a floating-point number to 93 * its native representation. See posix_strtold(). 94 * 91 95 * @param nptr 92 96 * @param endptr … … 95 99 double posix_strtod(const char *restrict nptr, char **restrict endptr) 96 100 { 97 // TODO 98 not_implemented(); 99 } 100 101 /** 102 * 103 * @param nptr 104 * @param endptr 105 * @return 106 */ 107 long double posix_strtold(const char *restrict nptr, char **restrict endptr) 108 { 109 // TODO 110 not_implemented(); 101 return (double) posix_strtold(nptr, endptr); 111 102 } 112 103 -
uspace/lib/posix/stdlib.h
rf48b637 r0ffbed9 43 43 #endif 44 44 45 /* Process Termination */ 45 46 #undef EXIT_FAILURE 46 47 #define EXIT_FAILURE 1 47 48 #undef EXIT_SUCCESS 48 49 #define EXIT_SUCCESS 0 49 50 #define _exit exit51 50 #define _Exit exit 52 51 53 52 /* Array Sort Function */ 54 extern void posix_qsort(void *array, size_t count, size_t size, int (*compare)(const void *, const void *)); 53 extern void posix_qsort(void *array, size_t count, size_t size, 54 int (*compare)(const void *, const void *)); 55 55 56 56 /* Environment Access */ … … 60 60 extern char *posix_realpath(const char *restrict name, char *restrict resolved); 61 61 62 /* decimal to native floating point conversion */62 /* Floating Point Conversion */ 63 63 extern float posix_strtof(const char *restrict nptr, char **restrict endptr); 64 64 extern double posix_strtod(const char *restrict nptr, char **restrict endptr); 65 65 extern long double posix_strtold(const char *restrict nptr, char **restrict endptr); 66 66 67 /* decimal to native integer conversion */67 /* Integer Conversion */ 68 68 extern int posix_atoi(const char *str); 69 69 -
uspace/lib/posix/string.c
rf48b637 r0ffbed9 43 43 #include <errno.h> 44 44 45 /* Defined for convenience. Returns pointer to the terminating nul character. 45 /** 46 * Defined for convenience. Returns pointer to the terminating nul character. 47 * 48 * @param s 49 * @return 46 50 */ 47 51 static char *strzero(const char *s) 48 52 { 49 while (*s != '\0') 50 s ++; 51 52 return (char*) s; 53 } 54 55 /* Returns true if s2 is a prefix of s1. 53 while (*s != '\0') { 54 s++; 55 } 56 57 return (char *) s; 58 } 59 60 /** 61 * Returns true if s2 is a prefix of s1. 62 * 63 * @param s1 64 * @param s2 65 * @return 56 66 */ 57 67 static bool begins_with(const char *s1, const char *s2) 58 68 { 59 69 while (*s1 == *s2 && *s2 != '\0') { 60 s1 61 s2 70 s1++; 71 s2++; 62 72 } 63 73 … … 66 76 } 67 77 68 /* The same as strpbrk, except it returns pointer to the nul terminator 78 /** 79 * The same as strpbrk, except it returns pointer to the nul terminator 69 80 * if no occurence is found. 81 * 82 * @param s1 83 * @param s2 84 * @return 70 85 */ 71 86 static char *strpbrk_null(const char *s1, const char *s2) 72 87 { 73 88 while (!posix_strchr(s2, *s1)) { 74 ++ 89 ++s1; 75 90 } 76 91 … … 82 97 * @param dest 83 98 * @param src 84 * @return dest99 * @return 85 100 */ 86 101 char *posix_strcpy(char *dest, const char *src) … … 95 110 * @param src 96 111 * @param n 97 * @return dest112 * @return 98 113 */ 99 114 char *posix_strncpy(char *dest, const char *src, size_t n) … … 114 129 assert(src != NULL); 115 130 116 for (size_t i = 0; ; ++ 131 for (size_t i = 0; ; ++i) { 117 132 dest[i] = src[i]; 118 133 … … 139 154 assert(src != NULL); 140 155 141 for (size_t i = 0; i < n; ++ 156 for (size_t i = 0; i < n; ++i) { 142 157 dest[i] = src[i]; 143 158 … … 147 162 if (src[i] == '\0') { 148 163 char *result = &dest[i]; 149 for (++ i; i < n; ++i) {164 for (++i; i < n; ++i) { 150 165 dest[i] = '\0'; 151 166 } … … 161 176 * @param dest 162 177 * @param src 163 * @return dest178 * @return 164 179 */ 165 180 char *posix_strcat(char *dest, const char *src) … … 177 192 * @param src 178 193 * @param n 179 * @return dest194 * @return 180 195 */ 181 196 char *posix_strncat(char *dest, const char *src, size_t n) … … 198 213 * @return Pointer to the first byte after c in dest if found, NULL otherwise. 199 214 */ 200 void *posix_memccpy(void * restrict dest, const void *restrictsrc, int c, size_t n)215 void *posix_memccpy(void *dest, const void *src, int c, size_t n) 201 216 { 202 217 assert(dest != NULL); … … 206 221 const unsigned char* bsrc = src; 207 222 208 for (size_t i = 0; i < n; ++ 223 for (size_t i = 0; i < n; ++i) { 209 224 bdest[i] = bsrc[i]; 210 225 … … 257 272 * @param n 258 273 * @return Difference of the first pair of inequal bytes, 259 * 274 * or 0 if areas have the same content 260 275 */ 261 276 int posix_memcmp(const void *mem1, const void *mem2, size_t n) … … 267 282 const unsigned char *s2 = mem2; 268 283 269 for (size_t i = 0; i < n; ++ 284 for (size_t i = 0; i < n; ++i) { 270 285 if (s1[i] != s2[i]) { 271 286 return s2[i] - s1[i]; … … 302 317 assert(s2 != NULL); 303 318 304 for (size_t i = 0; i < n; ++ 319 for (size_t i = 0; i < n; ++i) { 305 320 if (s1[i] != s2[i]) { 306 321 return s2[i] - s1[i]; … … 327 342 const unsigned char *s = mem; 328 343 329 for (size_t i = 0; i < n; ++ 344 for (size_t i = 0; i < n; ++i) { 330 345 if (s[i] == (unsigned char) c) { 331 346 return (void *) &s[i]; … … 346 361 347 362 /* special handling for the case that zero is searched for */ 348 if (c == '\0') 363 if (c == '\0') { 349 364 return strzero(s); 365 } 350 366 351 367 /* otherwise just loop through the string until found */ 352 368 while (*s != (char) c) { 353 if (*s == '\0') 369 if (*s == '\0') { 354 370 return NULL; 355 356 s ++; 371 } 372 373 s++; 357 374 } 358 375 … … 374 391 /* the same as in strchr, except it loops in reverse direction */ 375 392 while (*ptr != (char) c) { 376 if (ptr == s) 393 if (ptr == s) { 377 394 return NULL; 378 379 ptr ++; 395 } 396 397 ptr++; 380 398 } 381 399 … … 425 443 426 444 const char *ptr; 427 for (ptr = s1; *ptr != '\0'; ++ 428 if (!posix_strchr(s2, *ptr)) 445 for (ptr = s1; *ptr != '\0'; ++ptr) { 446 if (!posix_strchr(s2, *ptr)) { 429 447 break; 448 } 430 449 } 431 450 return ptr - s1; … … 444 463 445 464 /* special case - needle is an empty string */ 446 if (*s2 == '\0') 465 if (*s2 == '\0') { 447 466 return (char *) s1; 467 } 448 468 449 469 // TODO: use faster algorithm 450 470 /* check for prefix from every position - quadratic complexity */ 451 471 while (*s1 != '\0') { 452 if (begins_with(s1, s2)) 472 if (begins_with(s1, s2)) { 453 473 return (char *) s1; 474 } 454 475 455 s1 476 s1++; 456 477 } 457 478 … … 489 510 size_t len = posix_strlen(s2); 490 511 491 if (n > len) 512 if (n > len) { 492 513 posix_strcpy(s1, s2); 514 } 493 515 494 516 return len; … … 503 525 { 504 526 /* uses function from libc, we just have to negate errno 505 (POSIX uses positive errorcodes, HelenOS has negative) */ 506 return (char *) str_error (-errnum); 527 * (POSIX uses positive errorcodes, HelenOS has negative) 528 */ 529 return (char *) str_error(-errnum); 507 530 } 508 531 … … 510 533 * 511 534 * @param errnum Error code 512 * @param buf 513 * @param bufsz 535 * @param buf Buffer to store a human readable string to 536 * @param bufsz Size of buffer pointed to by buf 514 537 * @return 515 538 */ … … 552 575 assert(s != NULL); 553 576 554 for (size_t sz = 0; sz < n; ++ 577 for (size_t sz = 0; sz < n; ++sz) { 555 578 556 579 if (s[sz] == '\0') { -
uspace/lib/posix/string.h
rf48b637 r0ffbed9 130 130 #define strerror posix_strerror 131 131 #define strerror_r posix_strerror_r 132 #define strsignal(i) ((char *) "SIGNonSense: There are no signals in HelenOS.")132 #define strsignal(i) ((char *) "SIGNonSense: There are no signals in HelenOS.") 133 133 134 134 #define strlen posix_strlen -
uspace/lib/posix/strings.c
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 33 34 */ 34 35 35 #define POSIX_INTERNAL36 #define LIBPOSIX_INTERNAL 36 37 37 #include " common.h"38 #include "internal/common.h" 38 39 #include "strings.h" 39 40 #include "string.h" 41 #include "ctype.h" 40 42 43 /** 44 * 45 * @param i 46 * @return 47 */ 41 48 int posix_ffs(int i) 42 49 { … … 45 52 } 46 53 54 /** 55 * 56 * @param s1 57 * @param s2 58 * @return 59 */ 47 60 int posix_strcasecmp(const char *s1, const char *s2) 48 61 { 49 // TODO 50 not_implemented(); 62 return posix_strncasecmp(s1, s2, STR_NO_LIMIT); 51 63 } 52 64 65 /** 66 * 67 * @param s1 68 * @param s2 69 * @param n 70 * @return 71 */ 53 72 int posix_strncasecmp(const char *s1, const char *s2, size_t n) 54 73 { 55 // TODO 56 not_implemented(); 74 for (size_t i = 0; i < n; ++i) { 75 int cmp = tolower(s1[i]) - tolower(s2[i]); 76 if (cmp != 0) { 77 return cmp; 78 } 79 80 if (s1[i] == 0) { 81 return 0; 82 } 83 } 84 85 return 0; 57 86 } 58 87 88 /** 89 * 90 * @param mem1 91 * @param mem2 92 * @param n 93 * @return 94 */ 59 95 int posix_bcmp(const void *mem1, const void *mem2, size_t n) 60 96 { … … 63 99 } 64 100 101 /** 102 * 103 * @param dest 104 * @param src 105 * @param n 106 */ 65 107 void posix_bcopy(const void *dest, void *src, size_t n) 66 108 { … … 69 111 } 70 112 113 /** 114 * 115 * @param mem 116 * @param n 117 */ 71 118 void posix_bzero(void *mem, size_t n) 72 119 { … … 75 122 } 76 123 124 /** 125 * 126 * @param s 127 * @param c 128 * @return 129 */ 77 130 char *posix_index(const char *s, int c) 78 131 { … … 80 133 } 81 134 135 /** 136 * 137 * @param s 138 * @param c 139 * @return 140 */ 82 141 char *posix_rindex(const char *s, int c) 83 142 { … … 87 146 /** @} 88 147 */ 89 -
uspace/lib/posix/strings.h
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 36 37 #define POSIX_STRINGS_H_ 37 38 38 extern int posix_ffs(int); 39 /* Search Functions */ 40 extern int posix_ffs(int i); 39 41 40 extern int posix_strcasecmp(const char *, const char *); 41 extern int posix_strncasecmp(const char *, const char *, size_t); 42 /* String/Array Comparison */ 43 extern int posix_strcasecmp(const char *s1, const char *s2); 44 extern int posix_strncasecmp(const char *s1, const char *s2, size_t n); 42 45 43 46 /* TODO: not implemented due to missing locale.h … … 47 50 */ 48 51 49 50 52 /* Legacy Functions */ 51 52 extern int posix_bcmp(const void *, const void *, size_t); 53 extern void posix_bcopy(const void *, void *, size_t); 54 extern void posix_bzero(void *, size_t); 55 extern char *posix_index(const char *, int); 56 extern char *posix_rindex(const char *, int); 53 extern int posix_bcmp(const void *mem1, const void *mem2, size_t n); 54 extern void posix_bcopy(const void *dest, void *src, size_t n); 55 extern void posix_bzero(void *mem, size_t n); 56 extern char *posix_index(const char *s, int c); 57 extern char *posix_rindex(const char *s, int c); 57 58 58 59 #ifndef LIBPOSIX_INTERNAL 59 60 #define ffs posix_ffs 61 60 62 #define strcasecmp posix_strcasecmp 61 63 #define strncasecmp posix_strncasecmp 62 64 63 65 #define bcmp posix_bcmp 64 66 #define bcopy posix_bcopy -
uspace/lib/posix/sys/stat.c
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 29 36 #define LIBPOSIX_INTERNAL 30 37 31 38 #include "stat.h" 39 #include "../internal/common.h" 32 40 #include <mem.h> 33 41 34 /* Convert HelenOS stat struct into POSIX stat struct (if possible) 42 /** 43 * Convert HelenOS stat struct into POSIX stat struct (if possible) 44 * 45 * @param dest 46 * @param src 35 47 */ 36 static void stat_to_posix 48 static void stat_to_posix(struct posix_stat *dest, struct stat *src) 37 49 { 38 50 memset(dest, 0, sizeof(struct posix_stat)); … … 42 54 /* HelenOS doesn't support permissions, so we set them all */ 43 55 dest->st_mode = S_IRWXU | S_IRWXG | S_IRWXO; 44 if (src->is_file) 56 if (src->is_file) { 45 57 dest->st_mode |= S_IFREG; 46 if (src->is_directory) 58 } 59 if (src->is_directory) { 47 60 dest->st_mode |= S_IFDIR; 61 } 48 62 49 63 dest->st_nlink = src->lnkcnt; … … 51 65 } 52 66 67 /** 68 * 69 * @param fd 70 * @param st 71 * @return 72 */ 53 73 int posix_fstat(int fd, struct posix_stat *st) 54 74 { … … 62 82 } 63 83 84 /** 85 * 86 * @param path 87 * @param st 88 * @return 89 */ 90 int posix_lstat(const char *restrict path, struct posix_stat *restrict st) 91 { 92 // TODO 93 not_implemented(); 94 } 95 96 /** 97 * 98 * @param path 99 * @param st 100 * @return 101 */ 64 102 int posix_stat(const char *path, struct posix_stat *st) 65 103 { … … 73 111 } 74 112 113 /** 114 * 115 * @param path 116 * @param mode 117 * @return 118 */ 119 int posix_chmod(const char *path, mode_t mode) 120 { 121 // TODO 122 not_implemented(); 123 } 124 125 /** 126 * 127 * @param mask 128 * @return 129 */ 130 mode_t posix_umask(mode_t mask) 131 { 132 // TODO 133 not_implemented(); 134 } 135 136 /** @} 137 */ -
uspace/lib/posix/sys/stat.h
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 29 36 #ifndef POSIX_SYS_STAT_H_ 30 37 #define POSIX_SYS_STAT_H_ 31 38 32 39 #include "../libc/sys/stat.h" 33 #include "time.h" 40 #include "types.h" 41 #include "../time.h" 42 #include <ipc/devmap.h> 43 #include <task.h> 44 45 typedef devmap_handle_t posix_dev_t; 46 typedef task_id_t posix_pid_t; 34 47 35 48 /* values are the same as on Linux */ 49 50 #undef S_IFMT 51 #undef S_IFSOCK 52 #undef S_IFLNK 53 #undef S_IFREG 54 #undef S_IFBLK 55 #undef S_IFDIR 56 #undef S_IFCHR 57 #undef S_IFIFO 36 58 #define S_IFMT 0170000 /* all file types */ 37 59 #define S_IFSOCK 0140000 /* socket */ … … 43 65 #define S_IFIFO 0010000 /* FIFO */ 44 66 67 #undef S_ISUID 68 #undef S_ISGID 69 #undef S_ISVTX 45 70 #define S_ISUID 0004000 /* SUID */ 46 71 #define S_ISGID 0002000 /* SGID */ 47 72 #define S_ISVTX 0001000 /* sticky */ 48 73 74 #undef S_IRWXU 75 #undef S_IRUSR 76 #undef S_IWUSR 77 #undef S_IXUSR 49 78 #define S_IRWXU 00700 /* owner permissions */ 50 79 #define S_IRUSR 00400 … … 52 81 #define S_IXUSR 00100 53 82 83 #undef S_IRWXG 84 #undef S_IRGRP 85 #undef S_IWGRP 86 #undef S_IXGRP 54 87 #define S_IRWXG 00070 /* group permissions */ 55 88 #define S_IRGRP 00040 … … 57 90 #define S_IXGRP 00010 58 91 92 #undef S_IRWXO 93 #undef S_IROTH 94 #undef S_IWOTH 95 #undef S_IXOTH 59 96 #define S_IRWXO 00007 /* other permissions */ 60 97 #define S_IROTH 00004 … … 62 99 #define S_IXOTH 00001 63 100 101 #undef S_ISREG 102 #undef S_ISDIR 103 #undef S_ISCHR 104 #undef S_ISBLK 105 #undef S_ISFIFO 106 #undef S_ISLNK 107 #undef S_ISSOCK 64 108 #define S_ISREG(m) ((m & S_IFREG) != 0) 65 109 #define S_ISDIR(m) ((m & S_IFDIR) != 0) … … 67 111 #define S_ISBLK(m) ((m & S_IFBLK) != 0) 68 112 #define S_ISFIFO(m) ((m & S_IFIFO) != 0) 69 #define S_ISLNK(m) ((m & S_IFLNK) != 0) 113 #define S_ISLNK(m) ((m & S_IFLNK) != 0) /* symbolic link? (Not in POSIX.1-1996.) */ 70 114 #define S_ISSOCK(m) ((m & S_IFSOCK) != 0) /* socket? (Not in POSIX.1-1996.) */ 71 72 typedef devmap_handle_t dev_t;73 typedef unsigned int ino_t;74 typedef unsigned int nlink_t;75 typedef unsigned int uid_t;76 typedef unsigned int gid_t;77 typedef aoff64_t off_t;78 typedef unsigned int blksize_t;79 typedef unsigned int blkcnt_t;80 115 81 116 struct posix_stat { 82 117 struct stat sys_stat; 83 118 84 dev_t st_dev; /* ID of device containing file */85 ino_t st_ino; /* inode number */86 mode_t st_mode; /* protection */87 nlink_t st_nlink; /* number of hard links */88 uid_t st_uid; /* user ID of owner */89 gid_t st_gid; /* group ID of owner */90 dev_t st_rdev; /* device ID (if special file) */91 off_t st_size; /* total size, in bytes */92 blksize_t st_blksize; /* blocksize for file system I/O */93 blkcnt_t st_blocks; /* number of 512B blocks allocated */94 time_t st_atime; /* time of last access */95 time_t st_mtime; /* time of last modification */96 time_t st_ctime; /* time of last status change */119 posix_dev_t st_dev; /* ID of device containing file */ 120 posix_ino_t st_ino; /* inode number */ 121 mode_t st_mode; /* protection */ 122 posix_nlink_t st_nlink; /* number of hard links */ 123 posix_uid_t st_uid; /* user ID of owner */ 124 posix_gid_t st_gid; /* group ID of owner */ 125 posix_dev_t st_rdev; /* device ID (if special file) */ 126 posix_off_t st_size; /* total size, in bytes */ 127 posix_blksize_t st_blksize; /* blocksize for file system I/O */ 128 posix_blkcnt_t st_blocks; /* number of 512B blocks allocated */ 129 time_t st_atime; /* time of last access */ 130 time_t st_mtime; /* time of last modification */ 131 time_t st_ctime; /* time of last status change */ 97 132 }; 98 133 99 extern int posix_fstat(int, struct posix_stat *); 100 extern int posix_stat(const char *, struct posix_stat *); 134 extern int posix_fstat(int fd, struct posix_stat *st); 135 extern int posix_lstat(const char *restrict path, struct posix_stat *restrict st); 136 extern int posix_stat(const char *restrict path, struct posix_stat *restrict st); 137 extern int posix_chmod(const char *path, mode_t mode); 138 extern mode_t posix_umask(mode_t mask); 101 139 102 140 #ifndef LIBPOSIX_INTERNAL 141 #define dev_t posix_dev_t 142 #define pid_t posix_pid_t 103 143 #define fstat posix_fstat 144 #define lstat posix_lstat 104 145 #define stat posix_stat 146 #define chmod posix_chmod 147 #define umask posix_umask 105 148 #endif 106 149 107 150 #endif /* POSIX_SYS_STAT_H */ 108 151 152 /** @} 153 */ -
uspace/lib/posix/sys/types.h
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 29 36 #ifndef POSIX_SYS_TYPES_H_ 30 37 #define POSIX_SYS_TYPES_H_ 31 38 32 39 #include "../libc/sys/types.h" 33 #include <task.h>34 40 35 typedef task_id_t pid_t; 41 typedef unsigned int posix_ino_t; 42 typedef unsigned int posix_nlink_t; 43 typedef unsigned int posix_uid_t; 44 typedef unsigned int posix_gid_t; 45 typedef aoff64_t posix_off_t; 46 typedef unsigned int posix_blksize_t; 47 typedef unsigned int posix_blkcnt_t; 48 49 #ifndef LIBPOSIX_INTERNAL 50 #define ino_t posix_ino_t 51 #define nlink_t posix_nlink_t 52 #define uid_t posix_uid_t 53 #define gid_t posix_gid_t 54 #define off_t posix_off_t 55 #define blksize_t posix_blksize_t 56 #define blkcnt_t posix_blkcnt_t 57 #endif 36 58 37 59 #endif /* POSIX_SYS_TYPES_H_ */ 38 60 61 /** @} 62 */ -
uspace/lib/posix/time.c
rf48b637 r0ffbed9 36 36 #define LIBPOSIX_INTERNAL 37 37 38 #include "internal/common.h" 38 39 #include "time.h" 39 40 … … 83 84 { 84 85 // TODO 85 return 0;86 not_implemented(); 86 87 } 87 88 -
uspace/lib/posix/unistd.c
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 36 #define LIBPOSIX_INTERNAL 37 38 #include "internal/common.h" 29 39 #include "unistd.h" 30 40 31 int isatty(int fd) { 32 // TODO 33 return 0; 41 /** 42 * Dummy function. Always returns false, because there is no easy way to find 43 * out under HelenOS. 44 * 45 * @param fd 46 * @return Always false. 47 */ 48 int posix_isatty(int fd) 49 { 50 return false; 34 51 } 35 52 53 /** 54 * 55 * @return 56 */ 57 posix_uid_t posix_getuid(void) 58 { 59 // TODO 60 not_implemented(); 61 } 62 63 /** 64 * 65 * @return 66 */ 67 posix_gid_t posix_getgid(void) 68 { 69 // TODO 70 not_implemented(); 71 } 72 73 /** 74 * 75 * @param path 76 * @param amode 77 * @return 78 */ 79 int posix_access(const char *path, int amode) 80 { 81 // TODO 82 not_implemented(); 83 } 84 85 /** 86 * 87 * @param name 88 * @return 89 */ 90 long posix_sysconf(int name) 91 { 92 // TODO 93 not_implemented(); 94 } 95 96 /** @} 97 */ -
uspace/lib/posix/unistd.h
rf48b637 r0ffbed9 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy 3 4 * All rights reserved. 4 5 * … … 26 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 */ 28 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 29 36 #ifndef POSIX_UNISTD_H_ 30 37 #define POSIX_UNISTD_H_ 31 38 32 39 #include "libc/unistd.h" 40 #include "sys/types.h" 33 41 34 /* #include <getopt.h> */ 42 /* Process Termination */ 43 #define _exit exit 35 44 45 /* Option Arguments */ 36 46 extern char *optarg; 37 47 extern int optind, opterr, optopt; 38 48 extern int getopt(int, char * const [], const char *); 39 49 40 extern int isatty(int fd); 50 /* Identifying Terminals */ 51 extern int posix_isatty(int fd); 41 52 53 /* Process Identification */ 42 54 #define getpid task_get_id 55 extern posix_uid_t posix_getuid(void); 56 extern posix_gid_t posix_getgid(void); 43 57 58 /* Standard Streams */ 59 #undef STDIN_FILENO 44 60 #define STDIN_FILENO (fileno(stdin)) 61 #undef STDOUT_FILENO 45 62 #define STDOUT_FILENO (fileno(stdout)) 63 #undef STDERR_FILENO 46 64 #define STDERR_FILENO (fileno(stderr)) 65 66 /* File Accessibility */ 67 #undef F_OK 68 #undef X_OK 69 #undef W_OK 70 #undef R_OK 71 #define F_OK 0 /* Test for existence. */ 72 #define X_OK 1 /* Test for execute permission. */ 73 #define W_OK 2 /* Test for write permission. */ 74 #define R_OK 4 /* Test for read permission. */ 75 extern int posix_access(const char *path, int amode); 76 77 /* System Parameters */ 78 enum { 79 _SC_PHYS_PAGES, 80 _SC_AVPHYS_PAGES, 81 _SC_PAGESIZE, 82 _SC_CLK_TCK 83 }; 84 extern long posix_sysconf(int name); 85 86 #ifndef LIBPOSIX_INTERNAL 87 #define isatty posix_isatty 88 89 #define getuid posix_getuid 90 #define getgid posix_getgid 91 92 #define access posix_access 93 94 #define sysconf posix_sysconf 95 #endif 47 96 48 97 #endif /* POSIX_UNISTD_H_ */ 49 98 99 /** @} 100 */
Note:
See TracChangeset
for help on using the changeset viewer.