Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/source/unistd.c

    r59f388a r6afc9d7  
    4747#include "libc/stats.h"
    4848#include "libc/malloc.h"
    49 #include "libc/vfs/vfs.h"
    50 
    51 aoff64_t posix_pos[MAX_OPEN_FILES];
    5249
    5350/* Array of environment variable strings (NAME=VALUE). */
     
    108105char *posix_getcwd(char *buf, size_t size)
    109106{
    110         int rc = rcerrno(vfs_cwd_get, buf, size);
    111         if (rc != EOK)
     107        char *p = getcwd(buf, size);
     108
     109        if (p == NULL) {
     110                errno = -errno;
    112111                return NULL;
    113         return buf;
     112        }
     113
     114        return p;
    114115}
    115116
     
    121122int posix_chdir(const char *path)
    122123{
    123         int rc = rcerrno(vfs_cwd_set, path);
    124         if (rc != EOK)
    125                 return -1;
    126         return 0;
     124        return negerrno(chdir, path);
    127125}
    128126
     
    177175int posix_close(int fildes)
    178176{
    179         posix_pos[fildes] = 0;
    180         int rc = rcerrno(vfs_put, fildes);
    181         if (rc != EOK)
    182                 return -1;
    183         else
    184                 return 0;
     177        return negerrno(close, fildes);
    185178}
    186179
     
    195188ssize_t posix_read(int fildes, void *buf, size_t nbyte)
    196189{
    197         ssize_t size = rcerrno(vfs_read, fildes, &posix_pos[fildes], buf, nbyte);
    198         if (size < 0)
    199                 return -1;
    200         return size;
     190        return negerrno(read, fildes, buf, nbyte);
    201191}
    202192
     
    211201ssize_t posix_write(int fildes, const void *buf, size_t nbyte)
    212202{
    213         ssize_t size = rcerrno(vfs_write, fildes, &posix_pos[fildes], buf, nbyte);
    214         if (size < 0)
    215                 return -1;
    216         return size;
     203        return negerrno(write, fildes, buf, nbyte);
    217204}
    218205
     
    228215posix_off_t posix_lseek(int fildes, posix_off_t offset, int whence)
    229216{
    230         struct stat st;
    231         int rc;
    232 
    233         switch (whence) {
    234         case SEEK_SET:
    235                 posix_pos[fildes] = offset;
    236                 break;
    237         case SEEK_CUR:
    238                 posix_pos[fildes] += offset;
    239                 break;
    240         case SEEK_END:
    241                 rc = rcerrno(vfs_stat, fildes, &st);
    242                 if (rc != EOK)
    243                         return -1;
    244                 posix_pos[fildes] = st.size + offset;
    245                 break;
    246         }
    247         if (posix_pos[fildes] > INT64_MAX) {
    248                 /* The native width is too large for the POSIX interface. */
    249                 errno = ERANGE;
    250                 return -1;
    251         }
    252         return posix_pos[fildes];
     217        return negerrno(lseek, fildes, offset, whence);
    253218}
    254219
     
    261226int posix_fsync(int fildes)
    262227{
    263         if (rcerrno(vfs_sync, fildes) != EOK)
    264                 return -1;
    265         else
    266                 return 0;
     228        return negerrno(fsync, fildes);
    267229}
    268230
     
    276238int posix_ftruncate(int fildes, posix_off_t length)
    277239{
    278         if (rcerrno(vfs_resize, fildes, (aoff64_t) length) != EOK)
    279                 return -1;
    280         else
    281                 return 0;
     240        return negerrno(ftruncate, fildes, (aoff64_t) length);
    282241}
    283242
     
    290249int posix_rmdir(const char *path)
    291250{
    292         if (rcerrno(vfs_unlink_path, path) != EOK)
    293                 return -1;
    294         else
    295                 return 0;
     251        return negerrno(rmdir, path);
    296252}
    297253
     
    304260int posix_unlink(const char *path)
    305261{
    306         if (rcerrno(vfs_unlink_path, path) != EOK)
    307                 return -1;
    308         else
    309                 return 0;
     262        return negerrno(unlink, path);
    310263}
    311264
     
    331284int posix_dup2(int fildes, int fildes2)
    332285{
    333         return negerrno(vfs_clone, fildes, fildes2, false);
     286        return negerrno(dup2, fildes, fildes2);
    334287}
    335288
     
    349302                 * Check file existence by attempting to open it.
    350303                 */
    351                 int fd = posix_open(path, O_RDONLY);
    352                 if (fd < 0)
     304                int fd = negerrno(open, path, O_RDONLY);
     305                if (fd < 0) {
     306                        /* errno was set by open() */
    353307                        return -1;
    354                 posix_close(fd);
     308                }
     309                close(fd);
    355310                return 0;
    356311        } else {
Note: See TracChangeset for help on using the changeset viewer.