summaryrefslogtreecommitdiffstats
path: root/otherlibs/unix/unix.ml
diff options
context:
space:
mode:
Diffstat (limited to 'otherlibs/unix/unix.ml')
-rw-r--r--otherlibs/unix/unix.ml61
1 files changed, 12 insertions, 49 deletions
diff --git a/otherlibs/unix/unix.ml b/otherlibs/unix/unix.ml
index ed272af00..7daa12d29 100644
--- a/otherlibs/unix/unix.ml
+++ b/otherlibs/unix/unix.ml
@@ -133,11 +133,6 @@ let stdin = 0
let stdout = 1
let stderr = 2
-let max_opened_descr = ref 2
-
-let record_descr fd =
- if fd > !max_opened_descr then max_opened_descr := fd
-
type open_flag =
O_RDONLY
| O_WRONLY
@@ -151,14 +146,9 @@ type open_flag =
type file_perm = int
-external sys_openfile : string -> open_flag list -> file_perm -> file_descr
+external openfile : string -> open_flag list -> file_perm -> file_descr
= "unix_open"
-let openfile name flags perm =
- let fd = sys_openfile name flags perm in
- record_descr fd;
- fd
-
external close : file_descr -> unit = "unix_close"
external unsafe_read : file_descr -> string -> int -> int -> int = "unix_read"
external unsafe_write : file_descr -> string -> int -> int -> int = "unix_write"
@@ -229,11 +219,7 @@ external fchown : file_descr -> int -> int -> unit = "unix_fchown"
external umask : int -> int = "unix_umask"
external access : string -> access_permission list -> unit = "unix_access"
-external sys_dup : file_descr -> file_descr = "unix_dup"
-
-let dup fd =
- let newfd = sys_dup fd in record_descr newfd; newfd
-
+external dup : file_descr -> file_descr = "unix_dup"
external dup2 : file_descr -> file_descr -> unit = "unix_dup2"
external set_nonblock : file_descr -> unit = "unix_set_nonblock"
external clear_nonblock : file_descr -> unit = "unix_clear_nonblock"
@@ -252,12 +238,7 @@ external readdir : dir_handle -> string = "unix_readdir"
external rewinddir : dir_handle -> unit = "unix_rewinddir"
external closedir : dir_handle -> unit = "unix_closedir"
-external sys_pipe : unit -> file_descr * file_descr = "unix_pipe"
-
-let pipe () =
- let (fd1, fd2 as fdpair) = sys_pipe() in
- record_descr fd1; record_descr fd2; fdpair
-
+external pipe : unit -> file_descr * file_descr = "unix_pipe"
external symlink : string -> string -> unit = "unix_symlink"
external readlink : string -> string = "unix_readlink"
external mkfifo : string -> file_perm -> unit = "unix_mkfifo"
@@ -310,17 +291,15 @@ type interval_timer =
| ITIMER_VIRTUAL
| ITIMER_PROF
-type time_value = float
-
type interval_timer_status =
- { it_interval: time_value; (* Period *)
- it_value: time_value } (* Current value of the timer *)
- (* The type describing the status of an interval timer *)
+ { it_interval: float; (* Period *)
+ it_value: float } (* Current value of the timer *)
-external getitimer: interval_timer -> interval_timer_status = "unix_getitimer"
+external getitimer: interval_timer -> interval_timer_status
+ = "unix_getitimer" "unix_getitimer_native"
external setitimer:
interval_timer -> interval_timer_status -> interval_timer_status
- = "unix_setitimer"
+ = "unix_setitimer" "unix_setitimer_native"
external getuid : unit -> int = "unix_getuid"
external geteuid : unit -> int = "unix_geteuid"
@@ -393,24 +372,12 @@ type socket_option =
| SO_DONTROUTE
| SO_OOBINLINE
-external sys_socket : socket_domain -> socket_type -> int -> file_descr
+external socket : socket_domain -> socket_type -> int -> file_descr
= "unix_socket"
-let socket domain typ proto =
- let fd = sys_socket domain typ proto in
- record_descr fd; fd
-
-external sys_socketpair :
+external socketpair :
socket_domain -> socket_type -> int -> file_descr * file_descr
= "unix_socketpair"
-let socketpair domain typ proto =
- let (fd1, fd2 as fdpair) = sys_socketpair domain typ proto in
- record_descr fd1; record_descr fd2; fdpair
-
-external sys_accept : file_descr -> file_descr * sockaddr = "unix_accept"
-
-let accept fd =
- let (newfd, addr as result) = sys_accept fd in
- record_descr newfd; result
+external accept : file_descr -> file_descr * sockaddr = "unix_accept"
external bind : file_descr -> sockaddr -> unit = "unix_bind"
external connect : file_descr -> sockaddr -> unit = "unix_connect"
@@ -540,12 +507,9 @@ external tcflow: file_descr -> flow_action -> unit = "unix_tcflow"
(* High-level process management (system, popen) *)
-external closeall : int -> unit = "unix_closeall"
-
let system cmd =
match fork() with
- 0 -> closeall !max_opened_descr;
- execv "/bin/sh" [| "/bin/sh"; "-c"; cmd |];
+ 0 -> execv "/bin/sh" [| "/bin/sh"; "-c"; cmd |];
exit 127
| id -> snd(waitpid [] id)
@@ -555,7 +519,6 @@ let create_process cmd args new_stdin new_stdout new_stderr =
if new_stdin <> stdin then dup2 new_stdin stdin;
if new_stdout <> stdout then dup2 new_stdout stdout;
if new_stderr <> stderr then dup2 new_stderr stderr;
- closeall !max_opened_descr;
execvp cmd args;
exit 127
| id -> id