Changeset 58898d1d in mainline for uspace/lib/posix/source/unistd.c


Ignore:
Timestamp:
2017-03-24T20:31:54Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8e9b2534
Parents:
c9e3692
Message:

Remove VFS_IN_SEEK from VFS

File:
1 edited

Legend:

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

    rc9e3692 r58898d1d  
    4747#include "libc/stats.h"
    4848#include "libc/malloc.h"
     49#include "libc/vfs/vfs.h"
     50#include "libc/sys/stat.h"
     51
     52aoff64_t posix_pos[MAX_OPEN_FILES];
    4953
    5054/* Array of environment variable strings (NAME=VALUE). */
     
    175179int posix_close(int fildes)
    176180{
     181        posix_pos[fildes] = 0;
    177182        return negerrno(close, fildes);
    178183}
     
    188193ssize_t posix_read(int fildes, void *buf, size_t nbyte)
    189194{
    190         return negerrno(read, fildes, buf, nbyte);
     195        return negerrno(read, fildes, &posix_pos[fildes], buf, nbyte);
    191196}
    192197
     
    201206ssize_t posix_write(int fildes, const void *buf, size_t nbyte)
    202207{
    203         return negerrno(write, fildes, buf, nbyte);
     208        return negerrno(write, fildes, &posix_pos[fildes], buf, nbyte);
    204209}
    205210
     
    215220posix_off_t posix_lseek(int fildes, posix_off_t offset, int whence)
    216221{
    217         return negerrno(lseek, fildes, offset, whence);
     222        struct stat st;
     223
     224        switch (whence) {
     225        case SEEK_SET:
     226                posix_pos[fildes] = offset;
     227                break;
     228        case SEEK_CUR:
     229                posix_pos[fildes] += offset;
     230                break;
     231        case SEEK_END:
     232                if (fstat(fildes, &st) != EOK) {
     233                        errno = -errno;
     234                        return -1;
     235                }
     236                posix_pos[fildes] = st.size + offset;
     237                break;
     238        }
     239        return posix_pos[fildes];
    218240}
    219241
Note: See TracChangeset for help on using the changeset viewer.