8577c02583e9447da0f183196e935fc4c2c6ac57
[akaros.git] / tools / compilers / gcc-glibc / glibc-2.19-akaros / sysdeps / akaros / fcntl.c
1 /* Copyright (c) 2015 Google, Inc.
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details. */
4
5 #include <errno.h>
6 #include <fcntl.h>
7 #include <stdarg.h>
8 #include <stdlib.h>
9 #include <ros/syscall.h>
10
11 int __vfcntl(int fd, int cmd, va_list vl)
12 {
13         int ret, arg, advise;
14         __off64_t offset, len;
15         switch (cmd) {
16                 case F_GETFD:
17                 case F_SYNC:
18                         ret = ros_syscall(SYS_fcntl, fd, cmd, 0, 0, 0, 0);
19                         break;
20                 case F_DUPFD:
21                 case F_SETFD:
22                 case F_GETFL:
23                 case F_SETFL:
24                         arg = va_arg(vl, int);
25                         ret = ros_syscall(SYS_fcntl, fd, cmd, arg, 0, 0, 0);
26                         break;
27                 case F_ADVISE:
28                         offset = va_arg(vl, __off64_t);
29                         len = va_arg(vl, __off64_t);
30                         advise = va_arg(vl, int);
31                         ret = ros_syscall(SYS_fcntl, fd, cmd, offset, len, advise, 0);
32                         break;
33                 default:
34                         errno = ENOSYS;
35                         ret = -1;
36         }
37         return ret;
38 }
39
40 int __fcntl(int fd, int cmd, ...)
41 {
42         int ret;
43         va_list vl;
44         va_start(vl, cmd);
45         ret = __vfcntl(fd, cmd, vl);
46         va_end(vl);
47         return ret;
48 }
49 libc_hidden_def(__fcntl)