124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBFileSpec.cpp ------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10ec2d9787bed36e9eda6eac1996c7bed76c8d3da4Stephen Wilson#include <limits.h>
11ec2d9787bed36e9eda6eac1996c7bed76c8d3da4Stephen Wilson
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBFileSpec.h"
1398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h"
145f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h"
157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h"
1696154be69fa240a662419183ed08e1cfc5418164Greg Clayton#include "lldb/Core/Stream.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec () :
24f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    m_opaque_ap(new lldb_private::FileSpec())
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
29f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap))
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
31f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton}
327826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
33f9215bae3f7f76ad98bace0097821a12415690c5Greg ClaytonSBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) :
34f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    m_opaque_ap(new lldb_private::FileSpec(fspec))
35f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton{
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
38537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton// Deprected!!!
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec (const char *path) :
40537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton    m_opaque_ap(new FileSpec (path, true))
41537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton{
42537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton}
43537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton
44537a7a86687683fd403ce652d178fbc89e06ef9fGreg ClaytonSBFileSpec::SBFileSpec (const char *path, bool resolve) :
45537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton    m_opaque_ap(new FileSpec (path, resolve))
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::~SBFileSpec ()
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBFileSpec &
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator = (const SBFileSpec &rhs)
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (this != &rhs)
57f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton        *m_opaque_ap = *rhs.m_opaque_ap;
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return *this;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::IsValid() const
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
64f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    return *m_opaque_ap;
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::Exists () const
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
70952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
72f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    bool result = m_opaque_ap->Exists();
737826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    if (log)
753f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton        log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false"));
767826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
777826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    return result;
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
80eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Ticebool
81eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline TiceSBFileSpec::ResolveExecutableLocation ()
82eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice{
83f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    return m_opaque_ap->ResolveExecutableLocation ();
84eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice}
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char *
934ead2e9a5a74f465d00b0301c165fbebf4ee4ff3Johnny ChenSBFileSpec::GetFilename() const
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
95f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    const char *s = m_opaque_ap->GetFilename().AsCString();
967826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
97952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
987826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    if (log)
9949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    {
10049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton        if (s)
10149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton            log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s);
10249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton        else
10349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton            log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get());
10449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    }
1057826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
106a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return s;
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char *
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::GetDirectory() const
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
112f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    const char *s = m_opaque_ap->GetDirectory().AsCString();
113952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
114a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    if (log)
11549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    {
11649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton        if (s)
11749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton            log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s);
11849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton        else
11949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton            log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get());
12049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    }
121a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton    return s;
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::GetPath (char *dst_path, size_t dst_len) const
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
127952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1287826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
129f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len);
1307826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice
1317826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    if (log)
1325f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea        log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u",
133851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton                     m_opaque_ap.get(), result, dst_path, (uint64_t)dst_len, result);
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    if (result == 0 && dst_path && dst_len > 0)
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        *dst_path = '\0';
13749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    return result;
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec *
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator->() const
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
14463094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_ap.get();
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec *
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::get() const
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
15063094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_ap.get();
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec &
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator*() const
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
15763094e0bb161580564954dee512955c1c79d3476Greg Clayton    return *m_opaque_ap.get();
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec &
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::ref() const
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
16363094e0bb161580564954dee512955c1c79d3476Greg Clayton    return *m_opaque_ap.get();
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
170f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    *m_opaque_ap = fs;
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool
1747826c8894803dc729f29789ebc038956a94d3e7aCaroline TiceSBFileSpec::GetDescription (SBStream &description) const
1757826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice{
17696154be69fa240a662419183ed08e1cfc5418164Greg Clayton    Stream &strm = description.ref();
177f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    char path[PATH_MAX];
178f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    if (m_opaque_ap->GetPath(path, sizeof(path)))
179f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton        strm.PutCString (path);
1807826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice    return true;
1817826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice}
182