diff --git a/test/test-system-pathnames.script b/test/test-system-pathnames.script
index f66cf57b4968fa144431beaef60cf32b925d2aaf..740005ec30bee7bf69532ae7e3069738bce38c54 100644
--- a/test/test-system-pathnames.script
+++ b/test/test-system-pathnames.script
@@ -2,6 +2,7 @@
 
 (defsystem :test-system-pathnames
   :pathname "sources/level1"
+  :source-file nil
   :components
   ((:file "file1")
    (:file "file2" :pathname "level2/file2")
diff --git a/uiop/os.lisp b/uiop/os.lisp
index 2029428397e4737ab1ed650169a9b02b69149966..3cd598104d0a65284d9cc53a67c1fbe94ddae994 100644
--- a/uiop/os.lisp
+++ b/uiop/os.lisp
@@ -255,8 +255,7 @@ suitable for use as a directory name to segregate Lisp FASLs, C dynamic librarie
                         (strcat (nth-value 1 (unix:unix-current-directory)) "/"))
         #+cormanlisp (pathname (pl::get-current-directory)) ;; Q: what type does it return?
         #+ecl (ext:getcwd)
-        #+gcl (parse-namestring ;; this is a joke. Isn't there a better way?
-               (first (symbol-call :uiop :run-program '("/bin/pwd") :output :lines)))
+        #+gcl (let ((*default-pathname-defaults* #p"")) (truename #p""))
         #+genera *default-pathname-defaults* ;; on a Lisp OS, it *is* canonical!
         #+lispworks (system:current-directory)
         #+mkcl (mk-ext:getcwd)
diff --git a/uiop/stream.lisp b/uiop/stream.lisp
index 96ede3a9ded8435c4c64c233bd7cf9072a1d2493..a2cf23230b159ef72bf65cd772dd30892579cbda 100644
--- a/uiop/stream.lisp
+++ b/uiop/stream.lisp
@@ -557,7 +557,7 @@ Finally, the file will be deleted, unless the KEEP argument when CALL-FUNCTION'e
       :with prefix = (namestring (ensure-absolute-pathname (or prefix "tmp")
                                                            (or directory #'temporary-directory)))
       :with results = ()
-      :for counter :from (random (expt 36 #-gcl 8 #+gcl 6))
+      :for counter :from (random (expt 36 #-gcl 8 #+gcl 5))
       :for pathname = (pathname (format nil "~A~36R~@[~A~]~@[.~A~]" prefix counter suffix type))
       :for okp = nil :do
         ;; TODO: on Unix, do something about umask