RealPath.cpp revision f7ac0f19a1c8d0ad14bcf6456ce368b830fea886
1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//===- RealPath.cpp -------------------------------------------------------===//
2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//
3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//                     The MCLinker Project
4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//
5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber// This file is distributed under the University of Illinois Open Source
6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber// License. See LICENSE.TXT for details.
7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//
8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//===----------------------------------------------------------------------===//
9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "mcld/Support/RealPath.h"
10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "mcld/Support/FileSystem.h"
11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
12f933441648ef6a71dee783d733aac17b9508b452Andreas Huberusing namespace mcld::sys::fs;
13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//==========================
15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber// RealPath
16f933441648ef6a71dee783d733aac17b9508b452Andreas HuberRealPath::RealPath()
17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  : Path() {
18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}
19377b2ec9a2885f9b6405b07ba900a9e3f4349c38Kévin PETIT
20f933441648ef6a71dee783d733aac17b9508b452Andreas HuberRealPath::RealPath(const RealPath::ValueType* s )
21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  : Path(s) {
22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  initialize();
23f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}
24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
259575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas HuberRealPath::RealPath(const RealPath::StringType &s )
26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  : Path(s) {
271aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber  initialize();
28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}
29a73d9e0b3d171d2bfcd9eb07df9d6d36ae74df57Ronghua Wu
309575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas HuberRealPath::RealPath(const Path& pPath)
312abde2c118a94f843a7450818c925d3f0b673cd3Andy Hung : Path(pPath) {
32f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  initialize();
33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}
34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
35f933441648ef6a71dee783d733aac17b9508b452Andreas HuberRealPath::~RealPath()
369575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber{
37ec0c597cabf169ca646bcea5faac1bd81ed4484dAndreas Huber}
389575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber
3913d6faa02087ce3bb0d4a02b8495f1822f211433Chong ZhangRealPath& RealPath::assign(const Path& pPath)
4043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber{
4143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber  Path::m_PathName.assign(pPath.native());
42a73d9e0b3d171d2bfcd9eb07df9d6d36ae74df57Ronghua Wu  return (*this);
431aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber}
449575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber
45a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Hubervoid RealPath::initialize()
46a2e14302d4b5ca5443611d0c05218b9da4cc64a6Lajos Molnar{
47f0b72b509ab1147a2a0925aced970dd68fd7fa4fMarco Nelissen  if (isFromRoot()) {
4843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber    detail::canonicalize(m_PathName);
492abde2c118a94f843a7450818c925d3f0b673cd3Andy Hung  }
50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  else if (isFromPWD()) {
51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    Path path_name;
52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    detail::get_pwd(path_name);
53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    path_name.native() += preferred_separator;
54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    path_name.native() += m_PathName;
55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    detail::canonicalize(path_name.native());
56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    m_PathName = path_name.native();
57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber  }
58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}
59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
6043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber