on master help sign in
Fix fileModifiedTime on 32 bit systems

Can't use MKBIGI for the result, since that'll be a negative number for the current time! So use MKBIGUI instead to ensure it stays unsigned.

commitbbd0f286c2e76ae157b5130303d29622d31de309 authorEdwin Brady <ecb10@st-andrews.ac.uk> dateFri 6 Mar 2020, 09:12 (7 years ago) parent10fd4e7
3 files changed+6−5
libs/prelude/Prelude/File.idr+3−2 rts/idris_stdfgn.c+2−2 rts/idris_stdfgn.h+1−1
libs/prelude/Prelude/File.idr+3−2
@@ -150,7 +150,8 @@ do_getFileAccessTime h =
150150private
151151do_getFileModifiedTime : Ptr -> IO Integer
152152do_getFileModifiedTime h =
153− do MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> IO (Raw Integer)) h
153+ do vm <- getMyVM
154+ MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> Ptr -> IO (Raw Integer)) vm h
154155 pure i
155156
156157private
@@ -175,7 +176,7 @@ export
175176fileModifiedTime : File -> IO (Either FileError Integer)
176177fileModifiedTime (FHandle h)
177178 = do s <- do_getFileModifiedTime h
178− if (s < 0)
179+ if (s == -1)
179180 then Left <$> getFileError
180181 else pure (Right s)
181182
rts/idris_stdfgn.c+2−2
@@ -74,13 +74,13 @@ VAL fileAccessTime(void* h) {
7474 }
7575}
7676
77−VAL fileModifiedTime(void* h) {
77+VAL fileModifiedTime(VM* vm, void* h) {
7878 FILE* f = (FILE*)h;
7979 int fd = fileno(f);
8080
8181 struct stat buf;
8282 if (fstat(fd, &buf) == 0) {
83− return MKBIGI(buf.st_mtime);
83+ return MKBIGUI(vm, buf.st_mtime);
8484 } else {
8585 return MKBIGI(-1);
8686 }
rts/idris_stdfgn.h+1−1
@@ -18,7 +18,7 @@ int fileSize(void* h);
1818
1919// Return a negative number if not a file (e.g. directory or device)
2020VAL fileAccessTime(void* h);
21−VAL fileModifiedTime(void* h);
21+VAL fileModifiedTime(VM* vm, void* h);
2222VAL fileStatusTime(void* h);
2323
2424void* idris_dirOpen(char* dname);