diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2006-09-21 13:57:34 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2006-09-21 13:57:34 +0000 |
commit | 366af60a746782584a94c8a39bae25fadb28a9de (patch) | |
tree | 612f14df6ae900fa88471b7873e803c728d96398 | |
parent | 0b1b6eb0c62bb06b6e7e6b1222a3f9186dbc11ee (diff) |
Ajout de Unix.fstat et Unix.isatty
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@7633 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | otherlibs/win32unix/stat.c | 27 | ||||
-rw-r--r-- | otherlibs/win32unix/unix.ml | 6 |
2 files changed, 31 insertions, 2 deletions
diff --git a/otherlibs/win32unix/stat.c b/otherlibs/win32unix/stat.c index a0ba3ca8d..313882a52 100644 --- a/otherlibs/win32unix/stat.c +++ b/otherlibs/win32unix/stat.c @@ -86,3 +86,30 @@ CAMLprim value unix_stat_64(value path) return stat_aux(1, &buf); } +CAMLprim value unix_fstat(value handle) +{ + int ret; + struct _stati64 buf; + + ret = _fstati64(win_CRT_fd_of_filedescr(handle), &buf); + if (ret == -1) uerror("fstat", Nothing); + if (buf.st_size > Max_long) { + win32_maperr(ERROR_ARITHMETIC_OVERFLOW); + uerror("fstat", Nothing); + } + return stat_aux(0, &buf); +} + +CAMLprim value unix_fstat_64(value handle) +{ + int ret; + struct _stati64 buf; + + ret = _fstati64(win_CRT_fd_of_filedescr(handle), &buf); + if (ret == -1) uerror("fstat", Nothing); + if (buf.st_size > Max_long) { + win32_maperr(ERROR_ARITHMETIC_OVERFLOW); + uerror("fstat", Nothing); + } + return stat_aux(1, &buf); +} diff --git a/otherlibs/win32unix/unix.ml b/otherlibs/win32unix/unix.ml index ee7d6456e..acb12d695 100644 --- a/otherlibs/win32unix/unix.ml +++ b/otherlibs/win32unix/unix.ml @@ -242,7 +242,9 @@ type stats = external stat : string -> stats = "unix_stat" let lstat = stat -let fstat fd = invalid_arg "Unix.fstat not implemented" +external fstat : file_descr -> stats = "unix_fstat" +let isatty fd = + match (fstat fd).st_kind with S_CHR -> true | _ -> false (* Operations on file names *) @@ -273,7 +275,7 @@ module LargeFile = } external stat : string -> stats = "unix_stat_64" let lstat = stat - let fstat fd = invalid_arg "Unix.LargeFile.fstat not implemented" + external fstat : file_descr -> stats = "unix_fstat_64" end (* File permissions and ownership *) |