aboutsummaryrefslogtreecommitdiffstats
path: root/lib/System/Path.cpp
blob: a0c76dbd20626cdbe2796067e1133a87262fc48e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//===- Path.cpp - Path Operating System Concept -----------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// Copyright (C) 2004 eXtensible Systems, Inc. All Rights Reserved.
//
// This program is open source software; you can redistribute it and/or modify
// it under the terms of the University of Illinois Open Source License. See
// LICENSE.TXT (distributed with this software) for details.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE.
//
//===----------------------------------------------------------------------===//
// 
// This file implements the common Path concept for a variety of platforms.
// A path is simply the name of some file system storage place. Paths can be
// either directories or files.
//
//===----------------------------------------------------------------------===//
/// @file lib/System/Path.cpp
/// @author Reid Spencer <raspencer@x10sys.com> (original author)
/// @version \verbatim $Id$ \endverbatim
/// @date 2004/08/14
/// @since 1.4
/// @brief Defines the llvm::sys::Path class.
//===----------------------------------------------------------------------===//

#include "llvm/System/Path.h"

namespace llvm {
namespace sys {

ErrorCode
Path::append_directory( const std::string& dirname ) throw() {
  this->append( dirname );
  make_directory();
  return NOT_AN_ERROR;
}

ErrorCode
Path::append_file( const std::string& filename ) throw() {
  this->append( filename );
  return NOT_AN_ERROR;
}

ErrorCode
Path::create( bool create_parents)throw() {
  ErrorCode result ( NOT_AN_ERROR );
  if ( is_directory() ) {
    if ( create_parents ) {
      result = this->create_directories( );
    } else {
      result = this->create_directory( );
    }
  } else if ( is_file() ) {
    if ( create_parents ) {
      result = this->create_directories( );
    }
    if ( result ) {
      result = this->create_file( );
    }
  } else {
    result = ErrorCode(ERR_SYS_INVALID_ARG);
  }
  return result;
}

ErrorCode
Path::remove() throw() {
  ErrorCode result( NOT_AN_ERROR );
  if ( is_directory() ) {
    if ( exists() ) 
      this->remove_directory( );
  } else if ( is_file() ) {
    if ( exists() ) this->remove_file( );
  } else {
    result = ErrorCode(ERR_SYS_INVALID_ARG);
  }
  return result;
}

}
}

// Include the platform specific portions of this class
#include "linux/Path.cpp" 

// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab