diff --git a/libs/prelude/Prelude/File.idr b/libs/prelude/Prelude/File.idr index 5177e25c9..b60d4a2c2 100644 --- a/libs/prelude/Prelude/File.idr +++ b/libs/prelude/Prelude/File.idr @@ -150,7 +150,8 @@ do_getFileAccessTime h = private do_getFileModifiedTime : Ptr -> IO Integer do_getFileModifiedTime h = - do MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> IO (Raw Integer)) h + do vm <- getMyVM + MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> Ptr -> IO (Raw Integer)) vm h pure i private @@ -175,7 +176,7 @@ export fileModifiedTime : File -> IO (Either FileError Integer) fileModifiedTime (FHandle h) = do s <- do_getFileModifiedTime h - if (s < 0) + if (s == -1) then Left <$> getFileError else pure (Right s) diff --git a/rts/idris_stdfgn.c b/rts/idris_stdfgn.c index e1b9fc858..1507e9e8d 100644 --- a/rts/idris_stdfgn.c +++ b/rts/idris_stdfgn.c @@ -74,13 +74,13 @@ VAL fileAccessTime(void* h) { } } -VAL fileModifiedTime(void* h) { +VAL fileModifiedTime(VM* vm, void* h) { FILE* f = (FILE*)h; int fd = fileno(f); struct stat buf; if (fstat(fd, &buf) == 0) { - return MKBIGI(buf.st_mtime); + return MKBIGUI(vm, buf.st_mtime); } else { return MKBIGI(-1); } diff --git a/rts/idris_stdfgn.h b/rts/idris_stdfgn.h index 5342b981e..b0645991e 100644 --- a/rts/idris_stdfgn.h +++ b/rts/idris_stdfgn.h @@ -18,7 +18,7 @@ int fileSize(void* h); // Return a negative number if not a file (e.g. directory or device) VAL fileAccessTime(void* h); -VAL fileModifiedTime(void* h); +VAL fileModifiedTime(VM* vm, void* h); VAL fileStatusTime(void* h); void* idris_dirOpen(char* dname);