From 698d7c86f0223ac40360415e5e032449a94a06a5 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sat, 27 Apr 2013 08:12:29 +0000 Subject: [PATCH] Use LLVM's preferred current_path API instead of calling getcwd(3) directly. The existing code also failed to allocate a buffer for it so getcwd corrupted the stack. sys::fs::current_path takes care of the memory management. llvm-svn: 180669 --- clang/lib/Driver/Tools.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 40aebd4d1004..7e3ed2461aa9 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1775,9 +1775,6 @@ static bool shouldUseLeafFramePointer(const ArgList &Args, return true; } -// FIXME: This is a temporary hack until I can find a fix that works for all -// platforms. -#define MAXPATHLEN 4096 /// If the PWD environment variable is set, add a CC1 option to specify the /// debug compilation directory. static void addDebugCompDirArg(const ArgList &Args, ArgStringList &CmdArgs) { @@ -1794,9 +1791,10 @@ static void addDebugCompDirArg(const ArgList &Args, ArgStringList &CmdArgs) { CmdArgs.push_back(Args.MakeArgString(pwd)); return; } + // Fall back to using getcwd. - char *cwd; - if (pwd && ::getcwd(cwd, MAXPATHLEN)) { + SmallString<128> cwd; + if (!llvm::sys::fs::current_path(cwd)) { CmdArgs.push_back("-fdebug-compilation-dir"); CmdArgs.push_back(Args.MakeArgString(cwd)); }