36dab5d5d8353afdb000906283e08ae78ce3d0b0
8 #include <nacl_syscalls.h>
13 static int is_initialised
= 0;
14 static int use_rpc
= 0;
16 static int should_use_rpc(void)
19 use_rpc
= getenv("NACL_FD") != NULL
;
25 static int nacl_open_rpc(const char *filename
)
27 int (*imc_sendmsg
)(int fd
, const struct NaClImcMsgHdr
*msg
, int flags
) =
28 NACL_SYSCALL_ADDR(NACL_sys_imc_sendmsg
);
29 int (*imc_recvmsg
)(int fd
, struct NaClImcMsgHdr
*msg
, int flags
) =
30 NACL_SYSCALL_ADDR(NACL_sys_imc_recvmsg
);
32 struct NaClImcMsgIoVec iov
;
33 struct NaClImcMsgHdr msg
;
34 int filename_len
= strlen(filename
);
35 char *msg_data
= alloca(4 + filename_len
);
36 memcpy(msg_data
, "Open", 4);
37 memcpy(msg_data
+ 4, filename
, filename_len
);
39 iov
.length
= 4 + filename_len
;
44 if(imc_sendmsg(COMMS_FD
, &msg
, 0) < 0)
50 iov
.length
= sizeof(buf
);
53 int got
= imc_recvmsg(COMMS_FD
, &msg
, 0);
54 if(got
>= 0 && msg
.desc_length
== 1)
62 int __open(const char *filename
, int flags
, ...)
64 int (*nacl_open
)(char const *pathname
, int flags
, int mode
) =
65 NACL_SYSCALL_ADDR(NACL_sys_open
);
70 mode
= va_arg(arg
, int);
75 return nacl_open_rpc(filename
);
77 int result
= nacl_open(filename
, flags
, mode
);
84 libc_hidden_def (__open
)
85 weak_alias (__open
, open
)
86 strong_alias (__open
, __libc_open
)
87 strong_alias (__open
, __open_nocancel
)