aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/apps/FixNtSymbolPath.hs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/FixNtSymbolPath.hs')
-rw-r--r--apps/FixNtSymbolPath.hs51
1 files changed, 51 insertions, 0 deletions
diff --git a/apps/FixNtSymbolPath.hs b/apps/FixNtSymbolPath.hs
new file mode 100644
index 0000000..404dc77
--- /dev/null
+++ b/apps/FixNtSymbolPath.hs
@@ -0,0 +1,51 @@
+{-
+ - Copyright 2015 Egor Tensin <Egor.Tensin@gmail.com>
+ - This file is licensed under the terms of the MIT License.
+ - See LICENSE.txt for details.
+-}
+
+module Main ( main ) where
+
+import Control.Monad ( unless )
+import System.Directory ( createDirectoryIfMissing, getCurrentDirectory )
+import System.FilePath ( combine )
+
+import qualified EnvUtils
+
+getRemoteSymbolsDirectoryPath :: IO String
+getRemoteSymbolsDirectoryPath = do
+ localPath <- getLocalPath
+ createDirectoryIfMissing True localPath
+ return $ "SRV*" ++ localPath ++ "*" ++ remotePath
+ where
+ getLocalPath :: IO String
+ getLocalPath = do
+ cwd <- getCurrentDirectory
+ return $ combine cwd "symbols"
+ remotePath :: String
+ remotePath = "http://msdl.microsoft.com/download/symbols"
+
+getPdbsDirectoryPath :: IO String
+getPdbsDirectoryPath = do
+ cwd <- getCurrentDirectory
+ let path = combine cwd "pdbs"
+ createDirectoryIfMissing True path
+ return path
+
+fixNtSymbolPath :: IO ()
+fixNtSymbolPath = do
+ let env = EnvUtils.CurrentUserEnvironment
+ val <- EnvUtils.queryFromRegistry env ntSymbolPath
+ let presentPaths = EnvUtils.splitPaths val
+ remoteSymbolsPath <- getRemoteSymbolsDirectoryPath
+ pdbsPath <- getPdbsDirectoryPath
+ let requiredPaths = [pdbsPath, remoteSymbolsPath]
+ let missingPaths = filter (`notElem` presentPaths) requiredPaths
+ unless (null missingPaths) $ do
+ let newval = EnvUtils.joinPaths $ presentPaths ++ missingPaths
+ EnvUtils.saveToRegistry env ntSymbolPath newval
+ where
+ ntSymbolPath = "_NT_SYMBOL_PATH"
+
+main :: IO ()
+main = fixNtSymbolPath