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

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

Issue 576363002: [NaCl SDK] nacl_io: handle null irt function pointers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <sys/types.h> // Include something that will define __BIONIC__. 5 #include <sys/types.h> // Include something that will define __BIONIC__.
6 6
7 // The entire file is wrapped in this #if. We do this so this .cc file can be 7 // The entire file is wrapped in this #if. We do this so this .cc file can be
8 // compiled, even on a non-bionic build. 8 // compiled, even on a non-bionic build.
9 9
10 #if defined(__native_client__) && defined(__BIONIC__) 10 #if defined(__native_client__) && defined(__BIONIC__)
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 331
332 static void assign_real_pointers() { 332 static void assign_real_pointers() {
333 static bool assigned = false; 333 static bool assigned = false;
334 if (!assigned) { 334 if (!assigned) {
335 EXPAND_SYMBOL_LIST_OPERATION(ASSIGN_REAL_PTR) 335 EXPAND_SYMBOL_LIST_OPERATION(ASSIGN_REAL_PTR)
336 assigned = true; 336 assigned = true;
337 } 337 }
338 } 338 }
339 339
340 #define CHECK_REAL(func) \ 340 #define CHECK_REAL(func) \
341 if (!REAL(func)) \ 341 if (!REAL(func)) { \
342 assign_real_pointers(); 342 assign_real_pointers(); \
343 343 if (!REAL(func)) \
344 #define CHECK_REAL_NOSYS(func) \ 344 return ENOSYS; \
345 CHECK_REAL(func) \ 345 }
346 if (!REAL(func)) \
347 return ENOSYS;
348 346
349 // "real" functions, i.e. the unwrapped original functions. 347 // "real" functions, i.e. the unwrapped original functions.
350 348
351 int _real_close(int fd) { 349 int _real_close(int fd) {
352 CHECK_REAL(close); 350 CHECK_REAL(close);
353 return REAL(close)(fd); 351 return REAL(close)(fd);
354 } 352 }
355 353
356 void _real_exit(int status) { 354 void _real_exit(int status) {
357 REAL(exit)(status); 355 REAL(exit)(status);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 int _real_lseek(int fd, int64_t offset, int whence, int64_t* new_offset) { 427 int _real_lseek(int fd, int64_t offset, int whence, int64_t* new_offset) {
430 CHECK_REAL(seek); 428 CHECK_REAL(seek);
431 nacl_abi_off_t nacl_new_offs; 429 nacl_abi_off_t nacl_new_offs;
432 int ret = REAL(seek)(fd, offset, whence, &nacl_new_offs); 430 int ret = REAL(seek)(fd, offset, whence, &nacl_new_offs);
433 *new_offset = static_cast<off_t>(nacl_new_offs); 431 *new_offset = static_cast<off_t>(nacl_new_offs);
434 return ret; 432 return ret;
435 } 433 }
436 434
437 int _real_lstat(const char* path, struct stat* buf) { 435 int _real_lstat(const char* path, struct stat* buf) {
438 struct nacl_abi_stat st; 436 struct nacl_abi_stat st;
439 CHECK_REAL(fstat); 437 CHECK_REAL(lstat);
440 438
441 int err = REAL(lstat)(path, (struct stat*)&st); 439 int err = REAL(lstat)(path, (struct stat*)&st);
442 if (err) { 440 if (err) {
443 errno = err; 441 errno = err;
444 return -1; 442 return -1;
445 } 443 }
446 444
447 nacl_stat_to_stat(&st, buf); 445 nacl_stat_to_stat(&st, buf);
448 return 0; 446 return 0;
449 } 447 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 CHECK_REAL(truncate); 495 CHECK_REAL(truncate);
498 return REAL(truncate)(pathname, len); 496 return REAL(truncate)(pathname, len);
499 } 497 }
500 498
501 int _real_write(int fd, const void* buf, size_t count, size_t* nwrote) { 499 int _real_write(int fd, const void* buf, size_t count, size_t* nwrote) {
502 CHECK_REAL(write); 500 CHECK_REAL(write);
503 return REAL(write)(fd, buf, count, nwrote); 501 return REAL(write)(fd, buf, count, nwrote);
504 } 502 }
505 503
506 int _real_getcwd(char* pathname, size_t len) { 504 int _real_getcwd(char* pathname, size_t len) {
507 CHECK_REAL_NOSYS(getcwd); 505 CHECK_REAL(getcwd);
508 return REAL(getcwd)(pathname, len); 506 return REAL(getcwd)(pathname, len);
509 } 507 }
510 508
511 static bool s_wrapped = false; 509 static bool s_wrapped = false;
512 510
513 void kernel_wrap_init() { 511 void kernel_wrap_init() {
514 if (!s_wrapped) { 512 if (!s_wrapped) {
515 assign_real_pointers(); 513 assign_real_pointers();
516 EXPAND_SYMBOL_LIST_OPERATION(USE_WRAP) 514 EXPAND_SYMBOL_LIST_OPERATION(USE_WRAP)
517 s_wrapped = true; 515 s_wrapped = true;
518 } 516 }
519 } 517 }
520 518
521 void kernel_wrap_uninit() { 519 void kernel_wrap_uninit() {
522 if (s_wrapped) { 520 if (s_wrapped) {
523 EXPAND_SYMBOL_LIST_OPERATION(USE_REAL) 521 EXPAND_SYMBOL_LIST_OPERATION(USE_REAL)
524 s_wrapped = false; 522 s_wrapped = false;
525 } 523 }
526 } 524 }
527 525
528 EXTERN_C_END 526 EXTERN_C_END
529 527
530 #endif // defined(__native_client__) && defined(__BIONIC__) 528 #endif // defined(__native_client__) && defined(__BIONIC__)
OLDNEW
« no previous file with comments | « no previous file | native_client_sdk/src/libraries/nacl_io/kernel_wrap_glibc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698