Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(894)

Side by Side Diff: components/nacl/loader/nonsfi/irt_filename.cc

Issue 140573003: Connect PPAPI IPC channels for non-SFI mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
Mark Seaborn 2014/02/07 23:54:10 Same comment as on https://codereview.chromium.org
hidehiko 2014/02/10 08:18:34 Sure. This is just a "giant demo CL", and this qui
5 #include <errno.h>
6 #include <sys/types.h>
7 #include <sys/stat.h>
8 #include <fcntl.h>
9
10 #include "base/logging.h"
11 #include "components/nacl/loader/nonsfi/abi_conversion.h"
12 #include "components/nacl/loader/nonsfi/irt_interfaces.h"
13 #include "components/nacl/loader/nonsfi/irt_util.h"
14 #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
15 #include "native_client/src/trusted/service_runtime/include/sys/stat.h"
16
17 namespace nacl {
18 namespace nonsfi {
19 namespace {
20
21 int IrtOpen(
22 const char* pathname, int oflag, nacl_abi_mode_t cmode, int* new_fd) {
23 // Some flags are ignored. Please see also NaClSysOpen
24 // native_client/src/trusted/service_runtime/sys_filename.c.
25 int flags;
26 switch(oflag & NACL_ABI_O_ACCMODE) {
27 case NACL_ABI_O_RDONLY:
28 flags = O_RDONLY;
29 break;
30 case NACL_ABI_O_WRONLY:
31 flags = O_WRONLY;
32 break;
33 case NACL_ABI_O_RDWR:
34 flags = O_RDWR;
35 break;
36 default:
37 LOG(WARNING) << "Unknown accmode: " << (oflag & NACL_ABI_O_ACCMODE);
38 flags = O_RDONLY;
39 }
40 if (oflag & NACL_ABI_O_CREAT)
41 flags |= O_CREAT;
42 if (oflag & NACL_ABI_O_TRUNC)
43 flags |= O_TRUNC;
44 if (oflag & NACL_ABI_O_APPEND)
45 flags |= O_APPEND;
46
47 mode_t mode = 0;
48 if (cmode & NACL_ABI_S_IRUSR)
49 mode |= S_IRUSR;
50 if (cmode & NACL_ABI_S_IWUSR)
51 mode |= S_IWUSR;
52 if (cmode & NACL_ABI_S_IXUSR)
53 mode |= S_IXUSR;
54
55 int fd = ::open(pathname, flags, mode);
56 if (fd < 0)
57 return errno;
58
59 *new_fd = fd;
60 return 0;
61 }
62
63 int IrtStat(const char* pathname, struct nacl_abi_stat* st) {
64 struct stat host_st;
65 if (::stat(pathname, &host_st) < 0)
66 return errno;
67
68 StatToNaClAbiStat(host_st, st);
69 return 0;
70 }
71
72 #if 1
73 int IrtGetCwd(char* pathname, size_t len) {
74 if (getcwd(pathname, len) == NULL)
75 return errno;
76 return 0;
77 }
78
79 int IrtUnlink(const char* pathname) {
80 return CheckError(unlink(pathname));
81 }
82
83 // TODO
84 int IrtOpenResource(const char* name, int* fd) {
85 return ENOSYS;
86 }
87
88 #endif
89 } // namespace
90
91 // Both open and stat should use nacl_abi_X for their argument types, rather
92 // than host type, such as struct stat or mode_t. However, the definition
93 // of nacl_irt_filename uses host types, so here we need to cast them.
94 const nacl_irt_filename kIrtFileName = {
95 reinterpret_cast<int(*)(const char*, int, mode_t, int*)>(IrtOpen),
96 reinterpret_cast<int(*)(const char*, struct stat*)>(IrtStat),
97 };
98
99 const nacl_irt_dev_filename kIrtDevFileName = {
100 reinterpret_cast<int(*)(const char*, int, mode_t, int*)>(IrtOpen),
101 reinterpret_cast<int(*)(const char*, struct stat*)>(IrtStat),
102 NULL, // mkdir
103 NULL, // rmdir
104 NULL, // chdir
105 IrtGetCwd,
106 IrtUnlink,
107 NULL, // truncate
108 NULL, // lstat
109 NULL, // link
110 NULL, // rename
111 NULL, // symlink
112 NULL, // chmod
113 NULL, // access
114 NULL, // readlink
115 NULL, // utimes
116 };
117
118 const nacl_irt_resource_open kIrtResourceOpen = {
119 IrtOpenResource,
120 };
121
122 } // namespace nonsfi
123 } // namespace nacl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698