From c02872da30f1ffca85c3dfcf9f115abecdd1fda9 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Wed, 14 Nov 2007 17:32:29 -0600 Subject: [PATCH] add unix.process --- extra/unix/process/process.factor | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 extra/unix/process/process.factor diff --git a/extra/unix/process/process.factor b/extra/unix/process/process.factor new file mode 100644 index 0000000000..a927d35ef5 --- /dev/null +++ b/extra/unix/process/process.factor @@ -0,0 +1,31 @@ + +USING: kernel alien.c-types sequences math unix combinators.cleave ; + +IN: unix.process + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: >argv ( seq -- alien ) [ malloc-char-string ] map f add >c-void*-array ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: exec ( pathname argv -- int ) + [ malloc-char-string ] [ >argv ] bi* execv ; + +: exec-with-path ( filename argv -- int ) + [ malloc-char-string ] [ >argv ] bi* execvp ; + +: exec-with-env ( filename argv envp -- int ) + [ malloc-char-string ] [ >argv ] [ >argv ] tri* execve ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: exec-args ( seq -- int ) [ first ] [ ] bi exec ; +: exec-args-with-path ( seq -- int ) [ first ] [ ] bi exec-with-path ; + +: exec-args-with-env ( seq seq -- int ) >r [ first ] [ ] bi r> exec-with-env ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: with-fork ( child parent -- pid ) fork [ zero? -rot if ] keep ; inline +