fix build on windows
authorJoey Hess <joeyh@joeyh.name>
Tue, 1 Aug 2023 21:38:59 +0000 (17:38 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 1 Aug 2023 21:39:24 +0000 (17:39 -0400)
Utility/UserInfo.hs

index 9bf83a1c13b6826bcc7a7b3be6e9bd9493d57549..5001785734e1dff12603b1d2dba38c99a67e866b 100644 (file)
@@ -28,22 +28,20 @@ import Prelude
  -
  - getpwent will fail on LDAP or NIS, so use HOME if set. -}
 myHomeDir :: IO FilePath
-myHomeDir = either giveup return =<< myVal env homeDirectory
-  where
+myHomeDir = either giveup return =<<
 #ifndef mingw32_HOST_OS
-       env = ["HOME"]
+       myVal ["HOME"] homeDirectory
 #else
-       env = ["USERPROFILE", "HOME"] -- HOME is used in Cygwin
+       myVal ["USERPROFILE", "HOME"] -- HOME is used in Cygwin
 #endif
 
 {- Current user's user name. -}
 myUserName :: IO (Either String String)
-myUserName = myVal env userName
-  where
+myUserName =
 #ifndef mingw32_HOST_OS
-       env = ["USER", "LOGNAME"]
+       myVal ["USER", "LOGNAME"] userName
 #else
-       env = ["USERNAME", "USER", "LOGNAME"]
+       myVal ["USERNAME", "USER", "LOGNAME"]
 #endif
 
 myUserGecos :: IO (Maybe String)
@@ -54,16 +52,20 @@ myUserGecos = return Nothing
 myUserGecos = eitherToMaybe <$> myVal [] userGecos
 #endif
 
+#ifndef mingw32_HOST_OS
 myVal :: [String] -> (UserEntry -> String) -> IO (Either String String)
 myVal envvars extract = go envvars
   where
        go [] = either (const $ envnotset) (Right . extract) <$> get
        go (v:vs) = maybe (go vs) (return . Right) =<< getEnv v
-#ifndef mingw32_HOST_OS
        -- This may throw an exception if the system doesn't have a
        -- passwd file etc; don't let it crash.
        get = tryNonAsync $ getUserEntryForID =<< getEffectiveUserID
 #else
-       get = return envnotset
+myVal :: [String] -> IO (Either String String)
+myVal envvars = go envvars
+  where
+       go [] = envnotset
+       go (v:vs) = maybe (go vs) (return . Right) =<< getEnv v
 #endif
        envnotset = Left ("environment not set: " ++ show envvars)