diff --git a/ghcup b/ghcup
index 405da2fe3a3ae943a5a06eb2b2ba42df54c41d15..a3ab95f9bdb217c83e761a20c116a3b96db54968 100755
--- a/ghcup
+++ b/ghcup
@@ -1022,16 +1022,15 @@ download_to_stdout() {
 
 # @FUNCTION: mktempdir
 # @DESCRIPTION:
-# Makes a temporary directory, placing the path in $tmp_dir.
+# Makes a temporary directory.
 mktempdir() {
     if test "${mydistro}" = "darwin"; then
         debug_message "mktemp -d -t ghcup"
-	tmp_dir=$(mktemp -d -t ghcup)
+        mktemp -d -t ghcup
     else
         debug_message "mktemp -d"
-	tmp_dir=$(mktemp -d)
+        mktemp -d
     fi
-    [ -z "${tmp_dir}" ] && die "Failed to create temporary directory"
 }
 
 # @FUNCTION: unpack
@@ -1428,7 +1427,8 @@ install_ghc() {
         first_install=false
     fi
 
-    mktempdir
+    tmp_dir=$(mktempdir)
+    { [ -z "${tmp_dir}" ] || ! [ -d "${tmp_dir}" ] ; } && die "Failed to create temporary directory"
     (
         if ${CACHING} ; then
             if [ ! -f "${CACHE_LOCATION}/${download_tarball_name}" ] ; then
@@ -1567,8 +1567,7 @@ upgrade() {
     status_message "Updating ${SCRIPT}"
 
     (
-        mktempdir
-        edo cd "${tmp_dir}"
+        edo cd "$(mktempdir)"
         download "${SCRIPT_UPDATE_URL}"
         edo chmod +x ghcup
         edo mv -f ghcup "${target_location}"/ghcup
@@ -1693,7 +1692,8 @@ install_cabal() {
 
     edo mkdir -p "${inst_location}"
 
-    mktempdir
+    tmp_dir=$(mktempdir)
+    { [ -z "${tmp_dir}" ] || ! [ -d "${tmp_dir}" ] ; } && die "Failed to create temporary directory"
     (
         if ${CACHING} ; then
             if [ ! -f "${CACHE_LOCATION}/${download_tarball_name}" ] ; then
@@ -1754,7 +1754,8 @@ compile_ghc() {
     fi
 
     status_message "Compiling GHC for version ${myghcver} from source"
-    mktempdir
+    tmp_dir=$(mktempdir)
+    { [ -z "${tmp_dir}" ] || ! [ -d "${tmp_dir}" ] ; } && die "Failed to create temporary directory"
     (
         if ${CACHING} ; then
             if [ ! -f "${CACHE_LOCATION}/${download_tarball_name}" ] ; then