Changes in / [0ffbed9:f48b637] in mainline
- Location:
- uspace/lib/posix
- Files:
-
- 1 added
- 13 deleted
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/Makefile
r0ffbed9 rf48b637 40 40 SOURCES = \ 41 41 ctype.c \ 42 getopt.c \43 42 stdio.c \ 44 43 stdlib.c \ 45 stdlib/strtold.c \46 44 string.c \ 47 45 strings.c \ -
uspace/lib/posix/ctype.c
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 #define LIBPOSIX_INTERNAL37 38 29 #include "ctype.h" 39 30 40 /** 41 * 42 * @param ch 43 * @return 44 */ 45 int posix_isxdigit(int ch) 31 int isxdigit(int ch) 46 32 { 47 33 return isdigit(ch) || 48 (ch >= 'a' && ch <= 'f') ||49 (ch >= 'A' && ch <= 'F');34 (ch >= 'a' && ch <= 'f') || 35 (ch >= 'A' && ch <= 'F'); 50 36 } 51 37 52 /** @}53 */ -
uspace/lib/posix/ctype.h
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 29 #ifndef POSIX_CTYPE_H_ 37 30 #define POSIX_CTYPE_H_ … … 39 32 #include "libc/ctype.h" 40 33 41 /* Classification of Characters */ 42 extern int posix_isxdigit(int ch); 43 44 #ifndef LIBPOSIX_INTERNAL 45 #define isxdigit posix_isxdigit 46 #endif 34 extern int isxdigit(int ch); 47 35 48 36 #endif /* POSIX_CTYPE_H_ */ 49 37 50 /** @}51 */ -
uspace/lib/posix/signal.h
r0ffbed9 rf48b637 27 27 */ 28 28 29 /** @addtogroup libposix30 * @{31 */32 /** @file33 */34 35 29 #ifndef POSIX_SIGNAL_H_ 36 30 #define POSIX_SIGNAL_H_ 37 31 38 #include "libc/errno.h"32 #include <errno.h> 39 33 40 34 /* HelenOS doesn't have signals, so calls to functions of this header … … 47 41 */ 48 42 49 #undef SIG_DFL50 43 #define SIG_DFL ((void (*)(int)) 0) 51 #undef SIG_ERR52 44 #define SIG_ERR ((void (*)(int)) 0) 53 #undef SIG_IGN54 45 #define SIG_IGN ((void (*)(int)) 0) 55 46 56 47 #define signal(sig,func) (errno = ENOTSUP, SIG_ERR) 57 #define raise(sig) ((int) 48 #define raise(sig) ((int)-1) 58 49 59 typedef int posix_sig_atomic_t;50 typedef int sig_atomic_t; 60 51 61 52 /* full POSIX set */ … … 91 82 }; 92 83 93 #ifndef LIBPOSIX_INTERNAL94 #define sig_atomic_t posix_sig_atomic_t95 #endif96 97 84 #endif /* POSIX_SIGNAL_H_ */ 98 85 99 /** @}100 */ -
uspace/lib/posix/stdio.c
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 34 33 */ 35 34 36 #define LIBPOSIX_INTERNAL35 #define POSIX_INTERNAL 37 36 38 37 #include <assert.h> 39 #include <errno.h> 40 41 #include "internal/common.h" 38 #include "errno.h" 39 #include "common.h" 42 40 #include "stdio.h" 43 41 #include "string.h" 44 45 42 /* not the best of solutions, but freopen will eventually 46 * need to be implemented in libc anyway 47 */ 43 need to be implemented in libc anyway */ 48 44 #include "../c/generic/private/stdio.h" 49 45 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) 46 FILE *posix_freopen(const char *restrict filename, 47 const char *restrict mode, 48 FILE *restrict stream) 73 49 { 74 50 assert(mode != NULL); … … 79 55 80 56 /* print error to stderr as well, to avoid hard to find problems 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"); 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"); 86 60 errno = ENOTSUP; 87 61 return NULL; … … 94 68 } 95 69 memcpy(copy, stream, sizeof(FILE)); 96 fclose(copy); /* copy is now freed */70 fclose(copy); /* copy is now freed */ 97 71 98 copy = fopen(filename, mode); /* open new stream */72 copy = fopen(filename, mode); /* open new stream */ 99 73 if (copy == NULL) { 100 74 /* fopen() sets errno */ … … 113 87 } 114 88 115 /**116 *117 * @param s118 */119 89 void posix_perror(const char *s) 120 {121 // TODO122 not_implemented();123 }124 125 /**126 *127 * @param stream128 * @param offset129 * @param whence130 * @return131 */132 int posix_fseeko(FILE *stream, posix_off_t offset, int whence)133 {134 // TODO135 not_implemented();136 }137 138 /**139 *140 * @param stream141 * @return142 */143 posix_off_t posix_ftello(FILE *stream)144 {145 // TODO146 not_implemented();147 }148 149 /**150 *151 * @param s152 * @param format153 * @param ...154 * @return155 */156 int posix_sprintf(char *s, const char *format, ...)157 {158 // TODO159 not_implemented();160 }161 162 /**163 *164 * @param s165 * @param format166 * @param ...167 * @return168 */169 int posix_sscanf(const char *s, const char *format, ...)170 90 { 171 91 // TODO … … 175 95 /** @} 176 96 */ 97 -
uspace/lib/posix/stdio.h
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 29 #ifndef POSIX_STDIO_H_ 37 30 #define POSIX_STDIO_H_ 38 31 39 32 #include "libc/stdio.h" 40 #include "sys/types.h"41 33 42 /* Character Input/Output */43 34 #define putc fputc 44 35 #define getc fgetc 45 extern int posix_ungetc(int c, FILE *stream);46 36 47 /* Opening Streams */48 extern FILE *posix_freopen(49 const char *restrict filename,50 const char *restrict mode,51 FILE *restrict stream);52 37 53 /* Error Messages */ 38 extern FILE *posix_freopen(const char *restrict filename, 39 const char *restrict mode, 40 FILE *restrict stream); 41 54 42 extern void posix_perror(const char *s); 55 43 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 44 #ifndef POSIX_INTERNAL 67 45 #define freopen posix_freopen 68 69 46 #define perror posix_perror 70 71 #define fseeko posix_fseeko72 #define ftello posix_ftello73 74 #define sprintf posix_sprintf75 #define sscanf posix_sscanf76 47 #endif 77 48 78 49 #endif /* POSIX_STDIO_H_ */ 79 50 80 /** @}81 */ -
uspace/lib/posix/stdlib.c
r0ffbed9 rf48b637 37 37 38 38 #include "stdlib.h" 39 #include " internal/common.h"39 #include "common.h" 40 40 41 41 /** … … 46 46 * @param compare 47 47 */ 48 void posix_qsort(void *array, size_t count, size_t size, 49 int (*compare)(const void *, const void *)) 48 void posix_qsort(void *array, size_t count, size_t size, int (*compare)(const void *, const void *)) 50 49 { 51 50 // TODO … … 77 76 78 77 /** 79 * Converts a string representation of a floating-point number to 80 * its native representation. See posix_strtold(). 81 * 78 * 82 79 * @param nptr 83 80 * @param endptr … … 86 83 float posix_strtof(const char *restrict nptr, char **restrict endptr) 87 84 { 88 return (float) posix_strtold(nptr, endptr); 85 // TODO 86 not_implemented(); 89 87 } 90 88 91 89 /** 92 * Converts a string representation of a floating-point number to 93 * its native representation. See posix_strtold(). 94 * 90 * 95 91 * @param nptr 96 92 * @param endptr … … 99 95 double posix_strtod(const char *restrict nptr, char **restrict endptr) 100 96 { 101 return (double) posix_strtold(nptr, endptr); 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(); 102 111 } 103 112 -
uspace/lib/posix/stdlib.h
r0ffbed9 rf48b637 43 43 #endif 44 44 45 /* Process Termination */46 45 #undef EXIT_FAILURE 47 46 #define EXIT_FAILURE 1 48 47 #undef EXIT_SUCCESS 49 48 #define EXIT_SUCCESS 0 49 50 #define _exit exit 50 51 #define _Exit exit 51 52 52 53 /* Array Sort Function */ 53 extern void posix_qsort(void *array, size_t count, size_t size, 54 int (*compare)(const void *, const void *)); 54 extern void posix_qsort(void *array, size_t count, size_t size, 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 /* Floating Point Conversion */62 /* decimal to native 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 /* Integer Conversion */67 /* decimal to native integer conversion */ 68 68 extern int posix_atoi(const char *str); 69 69 -
uspace/lib/posix/string.c
r0ffbed9 rf48b637 43 43 #include <errno.h> 44 44 45 /** 46 * Defined for convenience. Returns pointer to the terminating nul character. 47 * 48 * @param s 49 * @return 45 /* Defined for convenience. Returns pointer to the terminating nul character. 50 46 */ 51 47 static char *strzero(const char *s) 52 48 { 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 49 while (*s != '\0') 50 s ++; 51 52 return (char*) s; 53 } 54 55 /* Returns true if s2 is a prefix of s1. 66 56 */ 67 57 static bool begins_with(const char *s1, const char *s2) 68 58 { 69 59 while (*s1 == *s2 && *s2 != '\0') { 70 s1 ++;71 s2 ++;60 s1 ++; 61 s2 ++; 72 62 } 73 63 … … 76 66 } 77 67 78 /** 79 * The same as strpbrk, except it returns pointer to the nul terminator 68 /* The same as strpbrk, except it returns pointer to the nul terminator 80 69 * if no occurence is found. 81 *82 * @param s183 * @param s284 * @return85 70 */ 86 71 static char *strpbrk_null(const char *s1, const char *s2) 87 72 { 88 73 while (!posix_strchr(s2, *s1)) { 89 ++ s1;74 ++ s1; 90 75 } 91 76 … … 97 82 * @param dest 98 83 * @param src 99 * @return 84 * @return dest 100 85 */ 101 86 char *posix_strcpy(char *dest, const char *src) … … 110 95 * @param src 111 96 * @param n 112 * @return 97 * @return dest 113 98 */ 114 99 char *posix_strncpy(char *dest, const char *src, size_t n) … … 129 114 assert(src != NULL); 130 115 131 for (size_t i = 0; ; ++ i) {116 for (size_t i = 0; ; ++ i) { 132 117 dest[i] = src[i]; 133 118 … … 154 139 assert(src != NULL); 155 140 156 for (size_t i = 0; i < n; ++ i) {141 for (size_t i = 0; i < n; ++ i) { 157 142 dest[i] = src[i]; 158 143 … … 162 147 if (src[i] == '\0') { 163 148 char *result = &dest[i]; 164 for (++ i; i < n; ++i) {149 for (++ i; i < n; ++ i) { 165 150 dest[i] = '\0'; 166 151 } … … 176 161 * @param dest 177 162 * @param src 178 * @return 163 * @return dest 179 164 */ 180 165 char *posix_strcat(char *dest, const char *src) … … 192 177 * @param src 193 178 * @param n 194 * @return 179 * @return dest 195 180 */ 196 181 char *posix_strncat(char *dest, const char *src, size_t n) … … 213 198 * @return Pointer to the first byte after c in dest if found, NULL otherwise. 214 199 */ 215 void *posix_memccpy(void * dest, const void *src, int c, size_t n)200 void *posix_memccpy(void *restrict dest, const void *restrict src, int c, size_t n) 216 201 { 217 202 assert(dest != NULL); … … 221 206 const unsigned char* bsrc = src; 222 207 223 for (size_t i = 0; i < n; ++ i) {208 for (size_t i = 0; i < n; ++ i) { 224 209 bdest[i] = bsrc[i]; 225 210 … … 272 257 * @param n 273 258 * @return Difference of the first pair of inequal bytes, 274 * or 0 if areas have the same content259 * or 0 if areas have the same content 275 260 */ 276 261 int posix_memcmp(const void *mem1, const void *mem2, size_t n) … … 282 267 const unsigned char *s2 = mem2; 283 268 284 for (size_t i = 0; i < n; ++ i) {269 for (size_t i = 0; i < n; ++ i) { 285 270 if (s1[i] != s2[i]) { 286 271 return s2[i] - s1[i]; … … 317 302 assert(s2 != NULL); 318 303 319 for (size_t i = 0; i < n; ++ i) {304 for (size_t i = 0; i < n; ++ i) { 320 305 if (s1[i] != s2[i]) { 321 306 return s2[i] - s1[i]; … … 342 327 const unsigned char *s = mem; 343 328 344 for (size_t i = 0; i < n; ++ i) {329 for (size_t i = 0; i < n; ++ i) { 345 330 if (s[i] == (unsigned char) c) { 346 331 return (void *) &s[i]; … … 361 346 362 347 /* special handling for the case that zero is searched for */ 363 if (c == '\0') {348 if (c == '\0') 364 349 return strzero(s); 365 }366 350 367 351 /* otherwise just loop through the string until found */ 368 352 while (*s != (char) c) { 369 if (*s == '\0') {353 if (*s == '\0') 370 354 return NULL; 371 } 372 373 s++; 355 356 s ++; 374 357 } 375 358 … … 391 374 /* the same as in strchr, except it loops in reverse direction */ 392 375 while (*ptr != (char) c) { 393 if (ptr == s) {376 if (ptr == s) 394 377 return NULL; 395 } 396 397 ptr++; 378 379 ptr ++; 398 380 } 399 381 … … 443 425 444 426 const char *ptr; 445 for (ptr = s1; *ptr != '\0'; ++ ptr) {446 if (!posix_strchr(s2, *ptr)) {427 for (ptr = s1; *ptr != '\0'; ++ ptr) { 428 if (!posix_strchr(s2, *ptr)) 447 429 break; 448 }449 430 } 450 431 return ptr - s1; … … 463 444 464 445 /* special case - needle is an empty string */ 465 if (*s2 == '\0') {446 if (*s2 == '\0') 466 447 return (char *) s1; 467 }468 448 469 449 // TODO: use faster algorithm 470 450 /* check for prefix from every position - quadratic complexity */ 471 451 while (*s1 != '\0') { 472 if (begins_with(s1, s2)) {452 if (begins_with(s1, s2)) 473 453 return (char *) s1; 474 }475 454 476 s1 ++;455 s1 ++; 477 456 } 478 457 … … 510 489 size_t len = posix_strlen(s2); 511 490 512 if (n > len) {491 if (n > len) 513 492 posix_strcpy(s1, s2); 514 }515 493 516 494 return len; … … 525 503 { 526 504 /* uses function from libc, we just have to negate errno 527 * (POSIX uses positive errorcodes, HelenOS has negative) 528 */ 529 return (char *) str_error(-errnum); 505 (POSIX uses positive errorcodes, HelenOS has negative) */ 506 return (char *) str_error (-errnum); 530 507 } 531 508 … … 533 510 * 534 511 * @param errnum Error code 535 * @param buf Buffer to store a human readable string to536 * @param bufsz Size of buffer pointed to by buf512 * @param buf Buffer to store a human readable string to 513 * @param bufsz Size of buffer pointed to by buf 537 514 * @return 538 515 */ … … 575 552 assert(s != NULL); 576 553 577 for (size_t sz = 0; sz < n; ++ sz) {554 for (size_t sz = 0; sz < n; ++ sz) { 578 555 579 556 if (s[sz] == '\0') { -
uspace/lib/posix/string.h
r0ffbed9 rf48b637 130 130 #define strerror posix_strerror 131 131 #define strerror_r posix_strerror_r 132 #define strsignal(i) ((char 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
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 34 33 */ 35 34 36 #define LIBPOSIX_INTERNAL35 #define POSIX_INTERNAL 37 36 38 #include " internal/common.h"37 #include "common.h" 39 38 #include "strings.h" 40 39 #include "string.h" 41 #include "ctype.h"42 40 43 /**44 *45 * @param i46 * @return47 */48 41 int posix_ffs(int i) 49 42 { … … 52 45 } 53 46 54 /**55 *56 * @param s157 * @param s258 * @return59 */60 47 int posix_strcasecmp(const char *s1, const char *s2) 61 48 { 62 return posix_strncasecmp(s1, s2, STR_NO_LIMIT); 49 // TODO 50 not_implemented(); 63 51 } 64 52 65 /**66 *67 * @param s168 * @param s269 * @param n70 * @return71 */72 53 int posix_strncasecmp(const char *s1, const char *s2, size_t n) 73 54 { 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; 55 // TODO 56 not_implemented(); 86 57 } 87 58 88 /**89 *90 * @param mem191 * @param mem292 * @param n93 * @return94 */95 59 int posix_bcmp(const void *mem1, const void *mem2, size_t n) 96 60 { … … 99 63 } 100 64 101 /**102 *103 * @param dest104 * @param src105 * @param n106 */107 65 void posix_bcopy(const void *dest, void *src, size_t n) 108 66 { … … 111 69 } 112 70 113 /**114 *115 * @param mem116 * @param n117 */118 71 void posix_bzero(void *mem, size_t n) 119 72 { … … 122 75 } 123 76 124 /**125 *126 * @param s127 * @param c128 * @return129 */130 77 char *posix_index(const char *s, int c) 131 78 { … … 133 80 } 134 81 135 /**136 *137 * @param s138 * @param c139 * @return140 */141 82 char *posix_rindex(const char *s, int c) 142 83 { … … 146 87 /** @} 147 88 */ 89 -
uspace/lib/posix/strings.h
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 37 36 #define POSIX_STRINGS_H_ 38 37 39 /* Search Functions */ 40 extern int posix_ffs(int i); 38 extern int posix_ffs(int); 41 39 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); 40 extern int posix_strcasecmp(const char *, const char *); 41 extern int posix_strncasecmp(const char *, const char *, size_t); 45 42 46 43 /* TODO: not implemented due to missing locale.h … … 50 47 */ 51 48 49 52 50 /* Legacy Functions */ 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); 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); 58 57 59 58 #ifndef LIBPOSIX_INTERNAL 60 59 #define ffs posix_ffs 61 62 60 #define strcasecmp posix_strcasecmp 63 61 #define strncasecmp posix_strncasecmp 64 62 65 63 #define bcmp posix_bcmp 66 64 #define bcopy posix_bcopy -
uspace/lib/posix/sys/stat.c
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 29 #define LIBPOSIX_INTERNAL 37 30 38 31 #include "stat.h" 39 #include "../internal/common.h"40 32 #include <mem.h> 41 33 42 /** 43 * Convert HelenOS stat struct into POSIX stat struct (if possible) 44 * 45 * @param dest 46 * @param src 34 /* Convert HelenOS stat struct into POSIX stat struct (if possible) 47 35 */ 48 static void stat_to_posix (struct posix_stat *dest, struct stat *src)36 static void stat_to_posix (struct posix_stat *dest, struct stat *src) 49 37 { 50 38 memset(dest, 0, sizeof(struct posix_stat)); … … 54 42 /* HelenOS doesn't support permissions, so we set them all */ 55 43 dest->st_mode = S_IRWXU | S_IRWXG | S_IRWXO; 56 if (src->is_file) {44 if (src->is_file) 57 45 dest->st_mode |= S_IFREG; 58 } 59 if (src->is_directory) { 46 if (src->is_directory) 60 47 dest->st_mode |= S_IFDIR; 61 }62 48 63 49 dest->st_nlink = src->lnkcnt; … … 65 51 } 66 52 67 /**68 *69 * @param fd70 * @param st71 * @return72 */73 53 int posix_fstat(int fd, struct posix_stat *st) 74 54 { … … 82 62 } 83 63 84 /**85 *86 * @param path87 * @param st88 * @return89 */90 int posix_lstat(const char *restrict path, struct posix_stat *restrict st)91 {92 // TODO93 not_implemented();94 }95 96 /**97 *98 * @param path99 * @param st100 * @return101 */102 64 int posix_stat(const char *path, struct posix_stat *st) 103 65 { … … 111 73 } 112 74 113 /**114 *115 * @param path116 * @param mode117 * @return118 */119 int posix_chmod(const char *path, mode_t mode)120 {121 // TODO122 not_implemented();123 }124 125 /**126 *127 * @param mask128 * @return129 */130 mode_t posix_umask(mode_t mask)131 {132 // TODO133 not_implemented();134 }135 136 /** @}137 */ -
uspace/lib/posix/sys/stat.h
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 29 #ifndef POSIX_SYS_STAT_H_ 37 30 #define POSIX_SYS_STAT_H_ 38 31 39 32 #include "../libc/sys/stat.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; 33 #include "time.h" 47 34 48 35 /* values are the same as on Linux */ 49 50 #undef S_IFMT51 #undef S_IFSOCK52 #undef S_IFLNK53 #undef S_IFREG54 #undef S_IFBLK55 #undef S_IFDIR56 #undef S_IFCHR57 #undef S_IFIFO58 36 #define S_IFMT 0170000 /* all file types */ 59 37 #define S_IFSOCK 0140000 /* socket */ … … 65 43 #define S_IFIFO 0010000 /* FIFO */ 66 44 67 #undef S_ISUID68 #undef S_ISGID69 #undef S_ISVTX70 45 #define S_ISUID 0004000 /* SUID */ 71 46 #define S_ISGID 0002000 /* SGID */ 72 47 #define S_ISVTX 0001000 /* sticky */ 73 48 74 #undef S_IRWXU75 #undef S_IRUSR76 #undef S_IWUSR77 #undef S_IXUSR78 49 #define S_IRWXU 00700 /* owner permissions */ 79 50 #define S_IRUSR 00400 … … 81 52 #define S_IXUSR 00100 82 53 83 #undef S_IRWXG84 #undef S_IRGRP85 #undef S_IWGRP86 #undef S_IXGRP87 54 #define S_IRWXG 00070 /* group permissions */ 88 55 #define S_IRGRP 00040 … … 90 57 #define S_IXGRP 00010 91 58 92 #undef S_IRWXO93 #undef S_IROTH94 #undef S_IWOTH95 #undef S_IXOTH96 59 #define S_IRWXO 00007 /* other permissions */ 97 60 #define S_IROTH 00004 … … 99 62 #define S_IXOTH 00001 100 63 101 #undef S_ISREG102 #undef S_ISDIR103 #undef S_ISCHR104 #undef S_ISBLK105 #undef S_ISFIFO106 #undef S_ISLNK107 #undef S_ISSOCK108 64 #define S_ISREG(m) ((m & S_IFREG) != 0) 109 65 #define S_ISDIR(m) ((m & S_IFDIR) != 0) … … 111 67 #define S_ISBLK(m) ((m & S_IFBLK) != 0) 112 68 #define S_ISFIFO(m) ((m & S_IFIFO) != 0) 113 #define S_ISLNK(m) ((m & S_IFLNK) != 0) /* symbolic link? (Not in POSIX.1-1996.) */69 #define S_ISLNK(m) ((m & S_IFLNK) != 0) /* symbolic link? (Not in POSIX.1-1996.) */ 114 70 #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; 115 80 116 81 struct posix_stat { 117 82 struct stat sys_stat; 118 83 119 posix_dev_t st_dev; /* ID of device containing file */120 posix_ino_t st_ino; /* inode number */121 mode_t 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 130 time_t 131 time_t 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 */ 132 97 }; 133 98 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); 99 extern int posix_fstat(int, struct posix_stat *); 100 extern int posix_stat(const char *, struct posix_stat *); 139 101 140 102 #ifndef LIBPOSIX_INTERNAL 141 #define dev_t posix_dev_t142 #define pid_t posix_pid_t143 103 #define fstat posix_fstat 144 #define lstat posix_lstat145 104 #define stat posix_stat 146 #define chmod posix_chmod147 #define umask posix_umask148 105 #endif 149 106 150 107 #endif /* POSIX_SYS_STAT_H */ 151 108 152 /** @}153 */ -
uspace/lib/posix/sys/types.h
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 29 #ifndef POSIX_SYS_TYPES_H_ 37 30 #define POSIX_SYS_TYPES_H_ 38 31 39 32 #include "../libc/sys/types.h" 33 #include <task.h> 40 34 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 35 typedef task_id_t pid_t; 58 36 59 37 #endif /* POSIX_SYS_TYPES_H_ */ 60 38 61 /** @}62 */ -
uspace/lib/posix/time.c
r0ffbed9 rf48b637 36 36 #define LIBPOSIX_INTERNAL 37 37 38 #include "internal/common.h"39 38 #include "time.h" 40 39 … … 84 83 { 85 84 // TODO 86 not_implemented();85 return 0; 87 86 } 88 87 -
uspace/lib/posix/unistd.c
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup libposix31 * @{32 */33 /** @file34 */35 36 #define LIBPOSIX_INTERNAL37 38 #include "internal/common.h"39 29 #include "unistd.h" 40 30 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; 31 int isatty(int fd) { 32 // TODO 33 return 0; 51 34 } 52 35 53 /**54 *55 * @return56 */57 posix_uid_t posix_getuid(void)58 {59 // TODO60 not_implemented();61 }62 63 /**64 *65 * @return66 */67 posix_gid_t posix_getgid(void)68 {69 // TODO70 not_implemented();71 }72 73 /**74 *75 * @param path76 * @param amode77 * @return78 */79 int posix_access(const char *path, int amode)80 {81 // TODO82 not_implemented();83 }84 85 /**86 *87 * @param name88 * @return89 */90 long posix_sysconf(int name)91 {92 // TODO93 not_implemented();94 }95 96 /** @}97 */ -
uspace/lib/posix/unistd.h
r0ffbed9 rf48b637 1 1 /* 2 2 * Copyright (c) 2011 Jiri Zarevucky 3 * Copyright (c) 2011 Petr Koupy4 3 * All rights reserved. 5 4 * … … 27 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 27 */ 29 30 /** @addtogroup libposix 31 * @{ 32 */ 33 /** @file 34 */ 35 28 36 29 #ifndef POSIX_UNISTD_H_ 37 30 #define POSIX_UNISTD_H_ 38 31 39 32 #include "libc/unistd.h" 40 #include "sys/types.h"41 33 42 /* Process Termination */ 43 #define _exit exit 34 /* #include <getopt.h> */ 44 35 45 /* Option Arguments */46 36 extern char *optarg; 47 37 extern int optind, opterr, optopt; 48 38 extern int getopt(int, char * const [], const char *); 49 39 50 /* Identifying Terminals */ 51 extern int posix_isatty(int fd); 40 extern int isatty(int fd); 52 41 53 /* Process Identification */54 42 #define getpid task_get_id 55 extern posix_uid_t posix_getuid(void);56 extern posix_gid_t posix_getgid(void);57 43 58 /* Standard Streams */59 #undef STDIN_FILENO60 44 #define STDIN_FILENO (fileno(stdin)) 61 #undef STDOUT_FILENO62 45 #define STDOUT_FILENO (fileno(stdout)) 63 #undef STDERR_FILENO64 46 #define STDERR_FILENO (fileno(stderr)) 65 66 /* File Accessibility */67 #undef F_OK68 #undef X_OK69 #undef W_OK70 #undef R_OK71 #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_TCK83 };84 extern long posix_sysconf(int name);85 86 #ifndef LIBPOSIX_INTERNAL87 #define isatty posix_isatty88 89 #define getuid posix_getuid90 #define getgid posix_getgid91 92 #define access posix_access93 94 #define sysconf posix_sysconf95 #endif96 47 97 48 #endif /* POSIX_UNISTD_H_ */ 98 49 99 /** @}100 */
Note:
See TracChangeset
for help on using the changeset viewer.