I have a function called ``older-than-days?'' which produces true if a path is older than a number of days. (Source code at the end of the message.)
[email protected]> (older-than-days? 30 "c:/autoexec.bat") #t On Windows, if I give it a non-existent file, I can't seem to get an errno set to ENOENT. --8<---------------cut here---------------start------------->8--- [email protected]> (older-than-days? 30 "c:/whatever") file-or-directory-modify-seconds: error getting file/directory time path: c:/whatever system error: Unknown error; errno=-1 #f [email protected]> --8<---------------cut here---------------end--------------->8--- I looked at the source code for file-or-directory-modify-seconds at https://github.com/racket/racket/blob/136ea767e2f76aa3785ebd1ca214411cc68b4533/racket/src/rktio/rktio_fs.c#L1034 Here's the relevant passage: --8<---------------cut here---------------start------------->8--- rktio_timestamp_t *rktio_get_file_modify_seconds(rktio_t *rktio, const char *file) { #ifdef RKTIO_SYSTEM_WINDOWS rktio_timestamp_t *secs; if (UNC_stat(rktio, file, NULL, NULL, NULL, &secs, NULL, NULL, -1)) return secs; return NULL; #else [...] #endif --8<---------------cut here---------------end--------------->8--- (I couldn't locate UNC_stat. Where is it?) I guessed it some stat() C function was called. Microsoft seems to say stat does set errno in cases such as ENOENT. https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions?view=vs-2019 So I expected to see errno set to ENOENT in that example above. Can you educate me on this? Thank you. --8<---------------cut here---------------start------------->8--- My ``older-than-days?'' source code: (define (older-than-days? days path) (define timeline-mark (- (current-seconds) (* days 24 3600))) (define path-mark (with-handlers ([exn:fail:filesystem? (lambda (e) ;; where's my errno? (displayln (exn-message e)) +inf.0)]) (file-or-directory-modify-seconds path))) (< path-mark timeline-mark)) --8<---------------cut here---------------end--------------->8--- -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/lwnybyElykkp86XSbAc727heWInydkLJUXrd65QEXw1OMznXm0sEQBwoHJV9e5hpA2N4sX5uoODUptUhmCGHHZIv7hqWZtwFCB1lUSDDzJQ%3D%40protonmail.com.

