akaros/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/lseek64.c
<<
>>
Prefs
   1/* Copyright (C) 1991,95,96,97,98,2000 Free Software Foundation, Inc.
   2   This file is part of the GNU C Library.
   3
   4   The GNU C Library is free software; you can redistribute it and/or
   5   modify it under the terms of the GNU Lesser General Public
   6   License as published by the Free Software Foundation; either
   7   version 2.1 of the License, or (at your option) any later version.
   8
   9   The GNU C Library is distributed in the hope that it will be useful,
  10   but WITHOUT ANY WARRANTY; without even the implied warranty of
  11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12   Lesser General Public License for more details.
  13
  14   You should have received a copy of the GNU Lesser General Public
  15   License along with the GNU C Library; if not, write to the Free
  16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17   02111-1307 USA.  */
  18
  19#include <errno.h>
  20#include <unistd.h>
  21#include <sys/types.h>
  22#include <ros/syscall.h>
  23#include <assert.h>
  24
  25/* Seek to OFFSET on FD, starting from WHENCE.  */
  26off64_t
  27__libc_lseek64 (int fd, off64_t offset, int whence)
  28{
  29        off64_t retoff = 0;
  30        off_t hi = 0;
  31        off_t lo = 0;
  32        int ret;
  33        if (fd < 0) {
  34                __set_errno (EBADF);
  35                return -1;
  36        }
  37        switch (whence) {
  38        case SEEK_SET:
  39        case SEEK_CUR:
  40        case SEEK_END:
  41                break;
  42        default:
  43                __set_errno (EINVAL);
  44                return -1;
  45        }
  46        hi = offset >> 32;
  47        lo = offset & 0xffffffff;
  48        ret = ros_syscall(SYS_llseek, fd, hi, lo, &retoff, whence, 0);
  49        if (ret) {
  50                assert(ret == -1);      /* catch odd bugs */
  51                return ret;
  52        }
  53        return retoff;
  54}
  55weak_alias (__libc_lseek64, __lseek64)
  56weak_alias (__libc_lseek64, lseek64)
  57