10 #include <nacl_syscalls.h>
13 static int nacl_open_rpc(const char *filename
)
15 struct NaClImcMsgIoVec iov
;
16 struct NaClImcMsgHdr msg
;
17 int filename_len
= strlen(filename
);
18 char *msg_data
= alloca(4 + filename_len
);
19 memcpy(msg_data
, "Open", 4);
20 memcpy(msg_data
+ 4, filename
, filename_len
);
22 iov
.length
= 4 + filename_len
;
27 if(imc_sendmsg(NACL_COMMS_FD
, &msg
, 0) < 0)
33 iov
.length
= sizeof(buf
);
36 int got
= imc_recvmsg(NACL_COMMS_FD
, &msg
, 0);
37 if(got
>= 0 && msg
.desc_length
== 1)
45 int __open(const char *filename
, int flags
, ...)
47 int (*nacl_open
)(char const *pathname
, int flags
, int mode
) =
48 NACL_SYSCALL_ADDR(NACL_sys_open
);
53 mode
= va_arg(arg
, int);
57 if(nacl_should_use_rpc())
58 return nacl_open_rpc(filename
);
60 int result
= nacl_open(filename
, flags
, mode
);
67 libc_hidden_def (__open
)
68 weak_alias (__open
, open
)
69 strong_alias (__open
, __libc_open
)
70 strong_alias (__open
, __open_nocancel
)