pukkamustard schreef op di 25-01-2022 om 19:21 [+0000]: > +  (define (eris-encode-nar compressions) > +    (and (member %eris-zstd-compression compressions) > +         (let* ((nar (nar-cache-file cache item > +                                     #:compression %eris-zstd-compression)) > +                (stat (stat nar #f))) > +           (and stat > +                (call-with-input-file nar > +                  (cut eris-encode->string <> > +                       #:block-size %eris-block-size-large)))))) Why are exceptions turned into #f (in (stat nar #f))? Should this be done for all I/O errors, including, say, EOVERFLOW, ENOMEM or ENAMETOOLONG, or only for ENOENT? Is a race condition possible here? If so, maybe consider doing something like (catch 'system-error (lambda () (call-with-input-file ...)) (lambda exception (and it-is-a-ENOENT (apply throw exception)))) to avoid it? Greetings, Maxime.