                 (puthash local-repo t repos)))))))
     ;; The preamble to the find(1) command, which comes before the
     ;; repository-specific subparts (see above).
-    (setq command (append (list "find" "." "-name" ".git" "-prune")
-                          command))
+    (setq args (append (list "." "-name" ".git" "-prune")
+                       args))
     (with-temp-buffer
-      (let ((default-directory (straight--dir "repos"))
-            (stderr-buffer (get-buffer-create " *straight-stderr*")))
-        ;; Just in case there was garbage from a previous command.
-        (with-current-buffer stderr-buffer
-          (erase-buffer))
-        (let ((return (straight--make-process
-                       :command command
-                       :buffer (current-buffer)
-                       :stderr stderr-buffer)))
+      (let ((default-directory (straight--dir "repos")))
+        (let ((return (apply #'call-process "find" nil '(t t) nil args)))
           ;; find(1) always returns zero unless there was some kind of
           ;; error.
           (unless (= 0 return)
-            (error "Command failed: %s:\n%s"
-                   (string-join (mapcar #'shell-quote-argument command) " ")
-                   (with-current-buffer stderr-buffer
-                     (buffer-string)))))
+            (error "Command failed: find %s:\n%s"
+                   (string-join (mapcar #'shell-quote-argument args) " ")
+                   (buffer-string))))
         (maphash (lambda (local-repo _)
                    (goto-char (point-min))
                    (when (re-search-forward

                  (with-temp-buffer
                    (let* ((default-directory
                             (straight--dir "repos" local-repo))
                           (stderr-buffer
                            (get-buffer-create " *straight-stderr*"))
                           ;; This find(1) command ignores the .git
                           ;; directory, and prints the names of any
                           ;; files or directories with a newer mtime
                           ;; than the one specified.
                           (command `("find" "." "-name" ".git" "-prune"
                                      "-o" "-newermt" ,last-mtime "-print"))
                           (return (straight--make-process
                                    :command command
                                    :buffer (current-buffer)
                                    :stderr stderr-buffer)))
                      (unless (= 0 return)
                        (error "Command failed: %s:\n%s"
                               (string-join
                                (mapcar #'shell-quote-argument command)
                                " ")
                               (with-current-buffer stderr-buffer
                                 (buffer-string))))
                      ;; If anything was printed, the package has
                      ;; (maybe) been modified.
                      (> (buffer-size) 0))))))))))

        ;; already. This table maps repo names to booleans.
        (repos (make-hash-table :test #'equal))
        ;; The systematically generated arguments for find(1).
        (args nil))
    (dolist (package straight--eagerly-checked-packages)
      (when-let (build-info (gethash package straight--build-cache))
        ;; Don't use `cl-destructuring-bind', as that will
