Ludovic Courtès schreef op za 05-03-2022 om 23:19 [+0100]: > > Like with my comment on ‘Avoid extra 'lstat call.’, I would move > > the > > (format #t (G_ "Removed ~a.\n") directory) outside the catch. > > > > If 'format' somehow throws a ENOTEMPTY/ENOTDIR system-error, > > something > > is very wrong. > > Precisely: we can keep the ‘format’ call after ‘rmdir’ because we > know (1) it’s only going to be called if ‘rmdir’ succeeds, and (2) it > won’t throw to ‘system-error’. Yes, we could keep it inside the 'catch', but that doesn't it's a good idea, because if format throws a ENOTEMPTY/ENOTDIR, shouldn't that be reported because that seems very wrong? WDYT of (define (delete-if-empty file) ;; Returns #t if deleted, #f if skipped because empty (catch ... (lambda () (rmdir directory) #t) (lambda ... (cond ((= ENOTEMPTY ...) #false) ((= ENOTDIR ...) [TODO: if it was a regular file, shouldn't it still be deleted?]) (#true (throw ...)))))) (if (delete-if-empty) (format ... "removed ...") (format ... "skipped ...")) ?