OLD | NEW |
1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2013 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 <limits.h> | 5 #include <limits.h> |
6 #include <string.h> | 6 #include <string.h> |
7 | 7 |
8 #include "nacl_io/kernel_intercept.h" | 8 #include "nacl_io/kernel_intercept.h" |
9 #include "nacl_io/kernel_wrap.h" | 9 #include "nacl_io/kernel_wrap.h" |
10 | 10 |
| 11 /* |
| 12 * This interception should not really be needed under glibc since we can |
| 13 * hook the internal calls to getcwd. However, we need to intercept it here |
| 14 * since gtest call getcwd in a static constructor which general runs before |
| 15 * nacl_io is initiliased. |
| 16 */ |
11 char* getcwd(char* buf, size_t size) { | 17 char* getcwd(char* buf, size_t size) { |
12 // If size is 0, allocate as much as we need. | 18 // If size is 0, allocate as much as we need. |
13 if (size == 0) { | 19 if (size == 0) { |
14 char stack_buf[PATH_MAX + 1]; | 20 char stack_buf[PATH_MAX + 1]; |
15 if (!ki_getcwd(stack_buf, PATH_MAX)) | 21 if (!ki_getcwd(stack_buf, PATH_MAX)) |
16 return NULL; | 22 return NULL; |
17 size = strlen(stack_buf) + 1; | 23 size = strlen(stack_buf) + 1; |
18 } | 24 } |
19 // Allocate the buffer if needed | 25 // Allocate the buffer if needed |
20 if (buf == NULL) { | 26 if (buf == NULL) { |
21 buf = (char*)malloc(size); | 27 buf = (char*)malloc(size); |
22 } | 28 } |
23 return ki_getcwd(buf, size); | 29 return ki_getcwd(buf, size); |
24 } | 30 } |
OLD | NEW |