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

Side by Side Diff: native_client_sdk/src/libraries/nacl_io/kernel_proxy.cc

Issue 671513002: [NaCk SDK] nacl_io: Don't assume ~S_IFMT are the mode bits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix_umask
Patch Set: Created 6 years, 2 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "nacl_io/kernel_proxy.h" 5 #include "nacl_io/kernel_proxy.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <limits.h> 10 #include <limits.h>
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 errno = error; 202 errno = error;
203 return -1; 203 return -1;
204 } 204 }
205 205
206 return AllocateFD(handle, path); 206 return AllocateFD(handle, path);
207 } 207 }
208 208
209 int KernelProxy::open(const char* path, int open_flags, mode_t mode) { 209 int KernelProxy::open(const char* path, int open_flags, mode_t mode) {
210 ScopedFilesystem fs; 210 ScopedFilesystem fs;
211 ScopedNode node; 211 ScopedNode node;
212 mode_t mask = ~GetUmask(); 212 mode_t mask = ~GetUmask() & S_MODEBITS;
213 213
214 Error error = AcquireFsAndNode(path, open_flags, mode & mask, &fs, &node); 214 Error error = AcquireFsAndNode(path, open_flags, mode & mask, &fs, &node);
215 if (error) { 215 if (error) {
216 errno = error; 216 errno = error;
217 return -1; 217 return -1;
218 } 218 }
219 219
220 ScopedKernelHandle handle(new KernelHandle(fs, node)); 220 ScopedKernelHandle handle(new KernelHandle(fs, node));
221 error = handle->Init(open_flags); 221 error = handle->Init(open_flags);
222 if (error) { 222 if (error) {
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 int KernelProxy::mkdir(const char* path, mode_t mode) { 365 int KernelProxy::mkdir(const char* path, mode_t mode) {
366 ScopedFilesystem fs; 366 ScopedFilesystem fs;
367 Path rel; 367 Path rel;
368 368
369 Error error = AcquireFsAndRelPath(path, &fs, &rel); 369 Error error = AcquireFsAndRelPath(path, &fs, &rel);
370 if (error) { 370 if (error) {
371 errno = error; 371 errno = error;
372 return -1; 372 return -1;
373 } 373 }
374 374
375 error = fs->Mkdir(rel, mode & ~GetUmask()); 375 mode_t mask = ~GetUmask() & S_MODEBITS;
376 error = fs->Mkdir(rel, mode & mask);
376 if (error) { 377 if (error) {
377 errno = error; 378 errno = error;
378 return -1; 379 return -1;
379 } 380 }
380 381
381 return 0; 382 return 0;
382 } 383 }
383 384
384 int KernelProxy::rmdir(const char* path) { 385 int KernelProxy::rmdir(const char* path) {
385 ScopedFilesystem fs; 386 ScopedFilesystem fs;
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 } 872 }
872 873
873 int KernelProxy::fchmod(int fd, mode_t mode) { 874 int KernelProxy::fchmod(int fd, mode_t mode) {
874 ScopedKernelHandle handle; 875 ScopedKernelHandle handle;
875 Error error = AcquireHandle(fd, &handle); 876 Error error = AcquireHandle(fd, &handle);
876 if (error) { 877 if (error) {
877 errno = error; 878 errno = error;
878 return -1; 879 return -1;
879 } 880 }
880 881
881 error = handle->node()->Fchmod(mode); 882 error = handle->node()->Fchmod(mode & S_MODEBITS);
882 if (error) { 883 if (error) {
883 errno = error; 884 errno = error;
884 return -1; 885 return -1;
885 } 886 }
886 887
887 return 0; 888 return 0;
888 } 889 }
889 890
890 int KernelProxy::fcntl(int fd, int request, va_list args) { 891 int KernelProxy::fcntl(int fd, int request, va_list args) {
891 Error error = 0; 892 Error error = 0;
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 errno = EINVAL; 1183 errno = EINVAL;
1183 return -1; 1184 return -1;
1184 } 1185 }
1185 1186
1186 // Unknown signum 1187 // Unknown signum
1187 errno = EINVAL; 1188 errno = EINVAL;
1188 return -1; 1189 return -1;
1189 } 1190 }
1190 1191
1191 mode_t KernelProxy::umask(mode_t mask) { 1192 mode_t KernelProxy::umask(mode_t mask) {
1192 return SetUmask(mask); 1193 return SetUmask(mask & S_MODEBITS);
1193 } 1194 }
1194 1195
1195 #ifdef PROVIDES_SOCKET_API 1196 #ifdef PROVIDES_SOCKET_API
1196 1197
1197 int KernelProxy::select(int nfds, 1198 int KernelProxy::select(int nfds,
1198 fd_set* readfds, 1199 fd_set* readfds,
1199 fd_set* writefds, 1200 fd_set* writefds,
1200 fd_set* exceptfds, 1201 fd_set* exceptfds,
1201 struct timeval* timeout) { 1202 struct timeval* timeout) {
1202 std::vector<pollfd> pollfds; 1203 std::vector<pollfd> pollfds;
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 errno = ENOTSOCK; 1818 errno = ENOTSOCK;
1818 return -1; 1819 return -1;
1819 } 1820 }
1820 1821
1821 return 0; 1822 return 0;
1822 } 1823 }
1823 1824
1824 #endif // PROVIDES_SOCKET_API 1825 #endif // PROVIDES_SOCKET_API
1825 1826
1826 } // namespace_nacl_io 1827 } // namespace_nacl_io
OLDNEW
« no previous file with comments | « native_client_sdk/src/libraries/nacl_io/kernel_object.cc ('k') | native_client_sdk/src/libraries/nacl_io/memfs/mem_fs_node.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698