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
3 * found in the LICENSE file. */
4
5#include <limits.h>
6#include <string.h>
7
8#include "nacl_io/kernel_intercept.h"
9#include "nacl_io/kernel_wrap.h"
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 */
17char* getcwd(char* buf, size_t size) {
18  // If size is 0, allocate as much as we need.
19  if (size == 0) {
20    char stack_buf[PATH_MAX + 1];
21    if (!ki_getcwd(stack_buf, PATH_MAX))
22      return NULL;
23    size = strlen(stack_buf) + 1;
24  }
25  // Allocate the buffer if needed
26  if (buf == NULL) {
27    buf = (char*)malloc(size);
28  }
29  return ki_getcwd(buf, size);
30}
31