on master help sign in
Fix fileModifiedTime on 32 bit systems
bbd0f28Edwin Brady
libs/prelude/Prelude/File.idr+3−2
@@ -150,7 +150,8 @@ do_getFileAccessTime h =
150private
150private
151do_getFileModifiedTime : Ptr -> IO Integer
151do_getFileModifiedTime : Ptr -> IO Integer
152do_getFileModifiedTime h =
152do_getFileModifiedTime h =
153+ do vm <- getMyVM
153− do MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> IO (Raw Integer)) h
154+ MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> Ptr -> IO (Raw Integer)) vm h
154 pure i
155 pure i
155
156
156private
157private
@@ -175,7 +176,7 @@ export
175fileModifiedTime : File -> IO (Either FileError Integer)
176fileModifiedTime : File -> IO (Either FileError Integer)
176fileModifiedTime (FHandle h)
177fileModifiedTime (FHandle h)
177 = do s <- do_getFileModifiedTime h
178 = do s <- do_getFileModifiedTime h
178− if (s < 0)
179+ if (s == -1)
179 then Left <$> getFileError
180 then Left <$> getFileError
180 else pure (Right s)
181 else pure (Right s)
181
182
rts/idris_stdfgn.c+2−2
@@ -74,13 +74,13 @@ VAL fileAccessTime(void* h) {
74 }
74 }
75}
75}
76
76
77−VAL fileModifiedTime(void* h) {
77+VAL fileModifiedTime(VM* vm, void* h) {
78 FILE* f = (FILE*)h;
78 FILE* f = (FILE*)h;
79 int fd = fileno(f);
79 int fd = fileno(f);
80
80
81 struct stat buf;
81 struct stat buf;
82 if (fstat(fd, &buf) == 0) {
82 if (fstat(fd, &buf) == 0) {
83− return MKBIGI(buf.st_mtime);
83+ return MKBIGUI(vm, buf.st_mtime);
84 } else {
84 } else {
85 return MKBIGI(-1);
85 return MKBIGI(-1);
86 }
86 }
rts/idris_stdfgn.h+1−1
@@ -18,7 +18,7 @@ int fileSize(void* h);
18
18
19// Return a negative number if not a file (e.g. directory or device)
19// Return a negative number if not a file (e.g. directory or device)
20VAL fileAccessTime(void* h);
20VAL fileAccessTime(void* h);
21−VAL fileModifiedTime(void* h);
21+VAL fileModifiedTime(VM* vm, void* h);
22VAL fileStatusTime(void* h);
22VAL fileStatusTime(void* h);
23
23
24void* idris_dirOpen(char* dname);
24void* idris_dirOpen(char* dname);