summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-02-08 08:20:38 +0100
committerGitHub <noreply@github.com>2017-02-08 08:20:38 +0100
commit41d3660e3a0af7d4d69c41a4fef4c9f0c4ee376b (patch)
tree19921b940f57382acdb01d03b7f7741c38d399dd
parent63f28b3650aee952b851875c6c687aaca23855fd (diff)
parent3680cbaf25a1b25fa14c82be249ef0eca235f0de (diff)
downloadNim-41d3660e3a0af7d4d69c41a4fef4c9f0c4ee376b.tar.gz
Merge pull request #5348 from c-blake/devel
Update Stat to work with modern Unix impls
-rw-r--r--lib/posix/posix.nim31
1 files changed, 24 insertions, 7 deletions
diff --git a/lib/posix/posix.nim b/lib/posix/posix.nim
index 716f625e7..a08da2dfa 100644
--- a/lib/posix/posix.nim
+++ b/lib/posix/posix.nim
@@ -101,6 +101,11 @@ type
 {.deprecated: [TSocketHandle: SocketHandle].}
 
 type
+  Timespec* {.importc: "struct timespec",
+               header: "<time.h>", final, pure.} = object ## struct timespec
+    tv_sec*: Time  ## Seconds.
+    tv_nsec*: int  ## Nanoseconds.
+
   Dirent* {.importc: "struct dirent",
              header: "<dirent.h>", final, pure.} = object ## dirent_t struct
     d_ino*: Ino  ## File serial number.
@@ -270,9 +275,14 @@ type
                            ## For a typed memory object, the length in bytes.
                            ## For other file types, the use of this field is
                            ## unspecified.
-    st_atime*: Time        ## Time of last access.
-    st_mtime*: Time        ## Time of last data modification.
-    st_ctime*: Time        ## Time of last status change.
+    when defined(macosx):
+      st_atime*: Time      ## Time of last access.
+      st_mtime*: Time      ## Time of last data modification.
+      st_ctime*: Time      ## Time of last status change.
+    else:
+      st_atim*: Timespec   ## Time of last access.
+      st_mtim*: Timespec   ## Time of last data modification.
+      st_ctim*: Timespec   ## Time of last status change.
     st_blksize*: Blksize   ## A file system-specific preferred I/O block size
                            ## for this object. In some file system types, this
                            ## may vary from file to file.
@@ -311,10 +321,6 @@ type
     tm_wday*: cint  ## Day of week [0,6] (Sunday =0).
     tm_yday*: cint  ## Day of year [0,365].
     tm_isdst*: cint ## Daylight Savings flag.
-  Timespec* {.importc: "struct timespec",
-               header: "<time.h>", final, pure.} = object ## struct timespec
-    tv_sec*: Time  ## Seconds.
-    tv_nsec*: int  ## Nanoseconds.
   Itimerspec* {.importc: "struct itimerspec", header: "<time.h>",
                  final, pure.} = object ## struct itimerspec
     it_interval*: Timespec  ## Timer period.
@@ -1609,6 +1615,17 @@ var
   MSG_OOB* {.importc, header: "<sys/socket.h>".}: cint
     ## Out-of-band data.
 
+when not defined(macosx):
+  proc st_atime*(s: Stat): Time {.inline.} =
+    ## Second-granularity time of last access
+    result = s.st_atim.tv_sec
+  proc st_mtime*(s: Stat): Time {.inline.} =
+    ## Second-granularity time of last data modification.
+    result = s.st_mtim.tv_sec
+  proc st_ctime*(s: Stat): Time {.inline.} =
+    ## Second-granularity time of last status change.
+    result = s.st_ctim.tv_sec
+
 proc WIFCONTINUED*(s:cint) : bool {.importc, header: "<sys/wait.h>".}
   ## True if child has been continued.
 proc WIFEXITED*(s:cint) : bool {.importc, header: "<sys/wait.h>".}