| Index: chrome/nacl/nacl_ipc_adapter.cc
|
| diff --git a/chrome/nacl/nacl_ipc_adapter.cc b/chrome/nacl/nacl_ipc_adapter.cc
|
| index 58c6fb2cd2b5b54dce56f1480b731b23f4f63bc3..45222ae73c08300d844239a407b81e8a0bdc6c66 100644
|
| --- a/chrome/nacl/nacl_ipc_adapter.cc
|
| +++ b/chrome/nacl/nacl_ipc_adapter.cc
|
| @@ -96,31 +96,25 @@ void DeleteChannel(IPC::Channel* channel) {
|
| delete channel;
|
| }
|
|
|
| -int TranslatePepperFileOpenFlags(int32_t pp_open_flags) {
|
| +// Translates Pepper's read/write open flags into NaCl's ones. The other open
|
| +// flags are discarded. If neither of the read/write flags is specified, just
|
| +// returns NACL_ABI_O_RDONLY as a safe fallback.
|
| +int TranslatePepperFileReadWriteOpenFlags(int32_t pp_open_flags) {
|
| int nacl_open_flag;
|
| - switch (pp_open_flags & (PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE)) {
|
| - case PP_FILEOPENFLAG_READ:
|
| - nacl_open_flag = NACL_ABI_O_RDONLY;
|
| - break;
|
| - case PP_FILEOPENFLAG_WRITE:
|
| - nacl_open_flag = NACL_ABI_O_WRONLY;
|
| - break;
|
| - case PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE:
|
| - nacl_open_flag = NACL_ABI_O_RDWR;
|
| - break;
|
| - default:
|
| - // NACL_ABI_O_RDONLY == 0, so make this ambiguous case readonly as a safe
|
| - // fallback.
|
| - nacl_open_flag = NACL_ABI_O_RDONLY;
|
| - break;
|
| + if ((pp_open_flags & (PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE)) ==
|
| + (PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_WRITE)) {
|
| + nacl_open_flag = NACL_ABI_O_RDWR;
|
| + } else if (pp_open_flags & PP_FILEOPENFLAG_READ) {
|
| + nacl_open_flag = NACL_ABI_O_RDONLY;
|
| + } else if (pp_open_flags & PP_FILEOPENFLAG_WRITE) {
|
| + nacl_open_flag = NACL_ABI_O_WRONLY;
|
| + } else {
|
| + DLOG(WARNING) << "PP_FILEOPENFLAG_READ and/or PP_FILEOPENFLAG_WRITE "
|
| + << "should be specified.";
|
| + // NACL_ABI_O_RDONLY == 0, so make this ambiguous case readonly as a safe
|
| + // fallback.
|
| + nacl_open_flag = NACL_ABI_O_RDONLY;
|
| }
|
| -
|
| - if (pp_open_flags & PP_FILEOPENFLAG_CREATE)
|
| - nacl_open_flag |= NACL_ABI_O_CREAT;
|
| - if (pp_open_flags & PP_FILEOPENFLAG_TRUNCATE)
|
| - nacl_open_flag |= NACL_ABI_O_TRUNC;
|
| - if (pp_open_flags & PP_FILEOPENFLAG_EXCLUSIVE)
|
| - nacl_open_flag |= NACL_ABI_O_EXCL;
|
| return nacl_open_flag;
|
| }
|
|
|
| @@ -445,7 +439,7 @@ bool NaClIPCAdapter::OnMessageReceived(const IPC::Message& msg) {
|
| #else
|
| iter->descriptor().fd,
|
| #endif
|
| - TranslatePepperFileOpenFlags(iter->open_flag()))));
|
| + TranslatePepperFileReadWriteOpenFlags(iter->open_flag()))));
|
| break;
|
| case ppapi::proxy::SerializedHandle::INVALID: {
|
| // Nothing to do. TODO(dmichael): Should we log this? Or is it
|
| @@ -584,3 +578,7 @@ void NaClIPCAdapter::SaveMessage(const IPC::Message& msg,
|
| rewritten_msg->SetData(header, msg.payload(), msg.payload_size());
|
| locked_data_.to_be_received_.push(rewritten_msg);
|
| }
|
| +
|
| +int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags) {
|
| + return TranslatePepperFileReadWriteOpenFlags(pp_open_flags);
|
| +}
|
|
|