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
3// found in the LICENSE file.
4
5#include "base/files/file_util.h"
6
7#import <Foundation/Foundation.h>
8#include <copyfile.h>
9
10#include "base/basictypes.h"
11#include "base/files/file_path.h"
12#include "base/mac/foundation_util.h"
13#include "base/strings/string_util.h"
14#include "base/threading/thread_restrictions.h"
15
16namespace base {
17namespace internal {
18
19bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path) {
20  ThreadRestrictions::AssertIOAllowed();
21  return (copyfile(from_path.value().c_str(),
22                   to_path.value().c_str(), NULL, COPYFILE_DATA) == 0);
23}
24
25}  // namespace internal
26
27bool GetTempDir(base::FilePath* path) {
28  NSString* tmp = NSTemporaryDirectory();
29  if (tmp == nil)
30    return false;
31  *path = base::mac::NSStringToFilePath(tmp);
32  return true;
33}
34
35FilePath GetHomeDir() {
36  NSString* tmp = NSHomeDirectory();
37  if (tmp != nil) {
38    FilePath mac_home_dir = base::mac::NSStringToFilePath(tmp);
39    if (!mac_home_dir.empty())
40      return mac_home_dir;
41  }
42
43  // Fall back on temp dir if no home directory is defined.
44  FilePath rv;
45  if (GetTempDir(&rv))
46    return rv;
47
48  // Last resort.
49  return FilePath("/tmp");
50}
51
52}  // namespace base
53