Rename patches to -akaros instead of -ros
[akaros.git] / tools / compilers / gcc-glibc / glibc-2.14.1-akaros / sysdeps / akaros / lseek.c
1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <errno.h>
4 #include <assert.h>
5 #include <ros/syscall.h>
6
7 /* potentially a 32 bit seek (off_t is a long) */
8 off_t __libc_lseek (int fd, off_t offset, int whence)
9 {
10         loff_t retoff = 0;
11         off_t hi = 0;
12         off_t lo = 0;
13         off_t ret;
14         if (fd < 0) {
15                 __set_errno (EBADF);
16                 return -1;
17         }
18         switch (whence) {
19                 case SEEK_SET:
20                 case SEEK_CUR:
21                 case SEEK_END:
22                         break;
23                 default:
24                         __set_errno (EINVAL);
25                         return -1;
26         }
27         /* get the high and low part, regardless of whether offset was already 64
28          * bits or not (casting to avoid warnings) */
29         hi = (loff_t)offset >> 32;
30         lo = offset & 0xffffffff;
31         ret = ros_syscall(SYS_llseek, fd, hi, lo, &retoff, whence, 0);
32         if (ret) {
33                 assert(ret == -1);      /* catch odd bugs */
34                 return ret;
35         }
36         /* Get the lower 32 or 64 bits, depending on the length of long */
37         ret = retoff & (unsigned long)(-1);
38         return ret;
39 }
40 weak_alias (__libc_lseek, __lseek)
41 libc_hidden_def (__lseek)
42 weak_alias (__libc_lseek, lseek)