[Lldb-commits] [lldb] r248048 - Added support for resolving symbolic links to FileSpec.

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Fri Sep 18 14:42:31 PDT 2015


Any time there's something involving windows, even if you're just
#ifdef'ing out a code path, I would prefer if you could wait until I or
someone else who works on Windows has a chance to comment before committing.

On Fri, Sep 18, 2015 at 2:40 PM Sean Callanan via lldb-commits <
lldb-commits at lists.llvm.org> wrote:

> Author: spyffe
> Date: Fri Sep 18 16:39:31 2015
> New Revision: 248048
>
> URL: http://llvm.org/viewvc/llvm-project?rev=248048&view=rev
> Log:
> Added support for resolving symbolic links to FileSpec.
>
> We use the symbolic link to resolver to find the target of the LLDB shlib
> symlink if there is a symlink.  This allows us to find shlib-relative
> resources
> even when running under the testsuite, where _lldb.so is a symlink in the
> Python
> resource directory.
>
> Also changed a comment to be slightly more clear about what resolve_path
> in the
> constructor for FileSpec means, since if we were actually using realpath()
> this
> code wouldn't have been necessary.
>
> http://reviews.llvm.org/D12984
>
> Modified:
>     lldb/trunk/include/lldb/Host/FileSpec.h
>     lldb/trunk/source/Host/common/FileSpec.cpp
>     lldb/trunk/source/Host/common/HostInfoBase.cpp
>
> Modified: lldb/trunk/include/lldb/Host/FileSpec.h
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/FileSpec.h?rev=248048&r1=248047&r2=248048&view=diff
>
> ==============================================================================
> --- lldb/trunk/include/lldb/Host/FileSpec.h (original)
> +++ lldb/trunk/include/lldb/Host/FileSpec.h Fri Sep 18 16:39:31 2015
> @@ -73,7 +73,7 @@ public:
>      ///     The full or partial path to a file.
>      ///
>      /// @param[in] resolve_path
> -    ///     If \b true, then we resolve the path with realpath,
> +    ///     If \b true, then we resolve the path, removing stray ../..
> and so forth,
>      ///     if \b false we trust the path is in canonical form already.
>      ///
>      /// @see FileSpec::SetFile (const char *path, bool resolve)
> @@ -511,6 +511,9 @@ public:
>
>      bool
>      IsSymbolicLink () const;
> +
> +    FileSpec
> +    ResolveSymbolicLink () const;
>
>      //------------------------------------------------------------------
>      /// Get the memory cost of this object.
>
> Modified: lldb/trunk/source/Host/common/FileSpec.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/FileSpec.cpp?rev=248048&r1=248047&r2=248048&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Host/common/FileSpec.cpp (original)
> +++ lldb/trunk/source/Host/common/FileSpec.cpp Fri Sep 18 16:39:31 2015
> @@ -811,6 +811,32 @@ FileSpec::IsSymbolicLink () const
>  #endif
>  }
>
> +FileSpec
> +FileSpec::ResolveSymbolicLink () const {
> +    if (!IsSymbolicLink())
> +    {
> +        return *this;
> +    }
> +
> +    char resolved_path[PATH_MAX];
> +    if (!GetPath (resolved_path, sizeof (resolved_path)))
> +    {
> +        return *this;
> +    }
> +
> +#ifdef _WIN32
> +    return *this; // TODO make this work on win32
> +#else
> +    char real_path[PATH_MAX + 1];
> +    if (realpath(resolved_path, real_path) == nullptr)
> +    {
> +        return *this;
> +    }
> +
> +    return FileSpec(real_path, false);
> +#endif
> +}
> +
>  uint32_t
>  FileSpec::GetPermissions () const
>  {
>
> Modified: lldb/trunk/source/Host/common/HostInfoBase.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/HostInfoBase.cpp?rev=248048&r1=248047&r2=248048&view=diff
>
> ==============================================================================
> --- lldb/trunk/source/Host/common/HostInfoBase.cpp (original)
> +++ lldb/trunk/source/Host/common/HostInfoBase.cpp Fri Sep 18 16:39:31 2015
> @@ -306,7 +306,10 @@ HostInfoBase::ComputeSharedLibraryDirect
>
>      FileSpec lldb_file_spec(
>          Host::GetModuleFileSpecForHostAddress(reinterpret_cast<void
> *>(reinterpret_cast<intptr_t>(HostInfoBase::GetLLDBPath))));
> -
> +
> +    // This is necessary because when running the testsuite the shlib
> might be a symbolic link inside the Python resource dir.
> +    lldb_file_spec = lldb_file_spec.ResolveSymbolicLink();
> +
>      // Remove the filename so that this FileSpec only represents the
> directory.
>      file_spec.GetDirectory() = lldb_file_spec.GetDirectory();
>
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150918/b40f3b67/attachment-0001.html>


More information about the lldb-commits mailing list