From 725a7e353cc1c45e10b58f45b4b8f2ba8268e588 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 21 Apr 2021 11:07:59 -0600 Subject: [PATCH] cs: avoid crash on startup if the working directory does not exist Closes #3793 --- racket/src/cs/io.sls | 2 +- racket/src/cs/schemified/io.scm | 15 ++++++++++----- racket/src/io/path/system.rkt | 9 ++++++++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/racket/src/cs/io.sls b/racket/src/cs/io.sls index ec738926f7..e63b2e7351 100644 --- a/racket/src/cs/io.sls +++ b/racket/src/cs/io.sls @@ -532,7 +532,7 @@ (include "include.ss") (include-generated "io.scm") - ;; Initialize: + ;; Initialize: (set-log-system-message! (lambda (level str) (1/log-message (|#%app| 1/current-logger) level str #f))) (set-error-display-eprintf! (lambda (fmt . args) diff --git a/racket/src/cs/schemified/io.scm b/racket/src/cs/schemified/io.scm index bcb1b5940d..7918340c7f 100644 --- a/racket/src/cs/schemified/io.scm +++ b/racket/src/cs/schemified/io.scm @@ -30352,11 +30352,16 @@ (define set-run-file! (lambda (p_0) (set! run-file p_0))) (define orig-dir (let ((os-host-dir_0 - (|#%app| - rktio_to_bytes - (|#%app| - rktio_get_current_directory - (unsafe-place-local-ref cell.1))))) + (let ((dir_0 + (|#%app| + rktio_get_current_directory + (unsafe-place-local-ref cell.1)))) + (if (vector? dir_0) + (let ((tmp_0 (system-path-convention-type))) + (if (eq? tmp_0 'unix) + #vu8(47) + (if (eq? tmp_0 'windows) #vu8(67 58 92) (void)))) + (|#%app| rktio_to_bytes dir_0))))) (let ((os-dir_0 (1/path->directory-path (host-> os-host-dir_0)))) (let ((tmp_0 (system-type 'os))) (if (eq? tmp_0 'windows) diff --git a/racket/src/io/path/system.rkt b/racket/src/io/path/system.rkt index f2d4774563..6b7b2f2ed2 100644 --- a/racket/src/io/path/system.rkt +++ b/racket/src/io/path/system.rkt @@ -71,7 +71,14 @@ (define orig-dir (let () - (define os-host-dir (rktio_to_bytes (rktio_get_current_directory rktio))) + (define os-host-dir (let ([dir (rktio_get_current_directory rktio)]) + (if (rktio-error? dir) + ;; If there's an error getting the current directory, + ;; just use a root directory + (case (system-path-convention-type) + [(unix) #"/"] + [(windows) #"C:\\"]) + (rktio_to_bytes dir)))) (define os-dir (path->directory-path (host-> os-host-dir))) (case (system-type 'os) [(windows) os-dir]