diff --git a/libmaxsi/Makefile b/libmaxsi/Makefile
index f7a62fe7..3dbe5c1f 100644
--- a/libmaxsi/Makefile
+++ b/libmaxsi/Makefile
@@ -115,21 +115,31 @@ dlfcn.o \
dup.o \
env.o \
errorprint.o \
+execle.o \
+execl.o \
+execlp.o \
+execve.o \
+execv.o \
+execvpe.o \
+execvp.o \
_exit.o \
-exit.o \
_Exit.o \
+exit.o \
fchmod.o \
fcloseall.o \
fcntl.o \
fddir-sortix.o \
fdio.o \
fileno.o \
+fork.o \
fpipe.o \
fstat.o \
ftruncate.o \
getc.o \
getcwd.o \
getdtablesize.o \
+getpid.o \
+getppid.o \
gettermmode.o \
init.o \
ioleast.o \
@@ -143,7 +153,6 @@ on_exit.o \
open.o \
pipe.o \
print.o \
-process.o \
putc.o \
random.o \
readdirents.o \
@@ -153,16 +162,23 @@ scanf.o \
setjmp.o \
setlocale.o \
settermmode.o \
+sfork.o \
signal.o \
sleep.o \
stat.o \
stdio.o \
+tfork.o \
time.o \
truncate.o \
umask.o \
unlink.o \
usleep.o \
+vexecle.o \
+vexecl.o \
+vexeclp.o \
vscanf.o \
+wait.o \
+waitpid.o \
winsize.o \
write.o \
diff --git a/libmaxsi/execl.cpp b/libmaxsi/execl.cpp
new file mode 100644
index 00000000..040f2f22
--- /dev/null
+++ b/libmaxsi/execl.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execl.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+
+extern "C" int execl(const char* pathname, ...)
+{
+ va_list args;
+ va_start(args, pathname);
+ int result = vexecl(pathname, args);
+ va_end(args);
+ return result;
+}
diff --git a/libmaxsi/execle.cpp b/libmaxsi/execle.cpp
new file mode 100644
index 00000000..b9ce43bc
--- /dev/null
+++ b/libmaxsi/execle.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execlp.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+
+extern "C" int execle(const char* pathname, ...)
+{
+ va_list args;
+ va_start(args, pathname);
+ int result = vexecle(pathname, args);
+ va_end(args);
+ return result;
+}
diff --git a/libmaxsi/execlp.cpp b/libmaxsi/execlp.cpp
new file mode 100644
index 00000000..b313c11f
--- /dev/null
+++ b/libmaxsi/execlp.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execlp.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+
+extern "C" int execlp(const char* filename, ...)
+{
+ va_list args;
+ va_start(args, filename);
+ int result = vexeclp(filename, args);
+ va_end(args);
+ return result;
+}
diff --git a/libmaxsi/execv.cpp b/libmaxsi/execv.cpp
new file mode 100644
index 00000000..e778ad6d
--- /dev/null
+++ b/libmaxsi/execv.cpp
@@ -0,0 +1,31 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execv.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#define _WANT_ENVIRON
+#include
+
+extern "C" int execv(const char* pathname, char* const* argv)
+{
+ return execve(pathname, argv, environ);
+}
diff --git a/libmaxsi/execve.cpp b/libmaxsi/execve.cpp
new file mode 100644
index 00000000..fcc7c00c
--- /dev/null
+++ b/libmaxsi/execve.cpp
@@ -0,0 +1,34 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execve.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+
+DEFN_SYSCALL3(int, sys_execve, SYSCALL_EXEC, const char*, char* const*, char* const*);
+
+extern "C" int execve(const char* pathname, char* const* argv,
+ char* const* envp)
+{
+ return sys_execve(pathname, argv, envp);
+}
diff --git a/libmaxsi/execvp.cpp b/libmaxsi/execvp.cpp
new file mode 100644
index 00000000..8804bbd5
--- /dev/null
+++ b/libmaxsi/execvp.cpp
@@ -0,0 +1,31 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execvp.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#define _WANT_ENVIRON
+#include
+
+extern "C" int execvp(const char* filename, char* const* argv)
+{
+ return execvpe(filename, argv, environ);
+}
diff --git a/libmaxsi/execvpe.cpp b/libmaxsi/execvpe.cpp
new file mode 100644
index 00000000..b1a81bde
--- /dev/null
+++ b/libmaxsi/execvpe.cpp
@@ -0,0 +1,44 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ execvpe.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+// Note that the only PATH variable in Sortix is the one used here.
+extern "C" int execvpe(const char* filename, char* const* argv,
+ char* const* envp)
+{
+ if ( strchr(filename, '/') )
+ return execve(filename, argv, envp);
+ size_t filenamelen = strlen(filename);
+ const char* PATH = "/bin";
+ size_t pathlen = strlen(PATH);
+ char* pathname = (char*) malloc(filenamelen + 1 + pathlen + 1);
+ if ( !pathname ) { return -1; }
+ stpcpy(stpcpy(stpcpy(pathname, PATH), "/"), filename);
+ int result = execve(pathname, argv, envp);
+ free(pathname);
+ return result;
+}
diff --git a/libmaxsi/fork.cpp b/libmaxsi/fork.cpp
new file mode 100644
index 00000000..ab2229aa
--- /dev/null
+++ b/libmaxsi/fork.cpp
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ fork.cpp
+ Create a new task inheriting some properties from the current task.
+
+*******************************************************************************/
+
+#include
+
+extern "C" pid_t fork()
+{
+ return sfork(SFFORK);
+}
diff --git a/libmaxsi/getpid.cpp b/libmaxsi/getpid.cpp
new file mode 100644
index 00000000..6063b48f
--- /dev/null
+++ b/libmaxsi/getpid.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ getpid.cpp
+ Get current process id.
+
+*******************************************************************************/
+
+#include
+#include
+
+DEFN_SYSCALL0(pid_t, sys_getpid, SYSCALL_GETPID);
+
+extern "C" pid_t getpid()
+{
+ return sys_getpid();
+}
diff --git a/libmaxsi/getppid.cpp b/libmaxsi/getppid.cpp
new file mode 100644
index 00000000..fadf220f
--- /dev/null
+++ b/libmaxsi/getppid.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ getpid.cpp
+ Get parent process id.
+
+*******************************************************************************/
+
+#include
+#include
+
+DEFN_SYSCALL0(pid_t, sys_getppid, SYSCALL_GETPPID);
+
+extern "C" pid_t getppid()
+{
+ return sys_getppid();
+}
diff --git a/libmaxsi/process.cpp b/libmaxsi/process.cpp
deleted file mode 100644
index c73517fe..00000000
--- a/libmaxsi/process.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
-
- This file is part of LibMaxsi.
-
- LibMaxsi is free software: you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with LibMaxsi. If not, see .
-
- process.cpp
- Exposes system calls for process creation and management.
-
-*******************************************************************************/
-
-#define _WANT_ENVIRON
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-namespace Maxsi
-{
- namespace Process
- {
- DEFN_SYSCALL3(int, SysExecVE, SYSCALL_EXEC, const char*, char* const*, char* const*);
- DEFN_SYSCALL2(pid_t, SysTFork, SYSCALL_TFORK, int, tforkregs_t*);
- DEFN_SYSCALL0(pid_t, SysGetPID, SYSCALL_GETPID);
- DEFN_SYSCALL0(pid_t, SysGetParentPID, SYSCALL_GETPPID);
- DEFN_SYSCALL3(pid_t, SysWait, SYSCALL_WAIT, pid_t, int*, int);
-
- extern "C" int execve(const char* pathname, char* const* argv,
- char* const* envp)
- {
- return SysExecVE(pathname, argv, envp);
- }
-
- extern "C" int execv(const char* pathname, char* const* argv)
- {
- return execve(pathname, argv, environ);
- }
-
- // Note that the only PATH variable in Sortix is the one used here.
- extern "C" int execvpe(const char* filename, char* const* argv,
- char* const* envp)
- {
- if ( strchr(filename, '/') )
- return execve(filename, argv, envp);
- size_t filenamelen = strlen(filename);
- const char* PATH = "/bin";
- size_t pathlen = strlen(PATH);
- char* pathname = (char*) malloc(filenamelen + 1 + pathlen + 1);
- if ( !pathname ) { return -1; }
- stpcpy(stpcpy(stpcpy(pathname, PATH), "/"), filename);
- int result = execve(pathname, argv, envp);
- free(pathname);
- return result;
- }
-
- extern "C" int execvp(const char* filename, char* const* argv)
- {
- return execvpe(filename, argv, environ);
- }
-
- extern "C" int vexecl(const char* pathname, va_list args)
- {
- va_list iter;
- va_copy(iter, args);
- size_t numargs = 0;
- while ( va_arg(iter, const char*) ) { numargs++; }
- va_end(iter);
- char** argv = (char**) malloc(sizeof(char*) * (numargs+1));
- if ( !argv ) { return -1; }
- for ( size_t i = 0; i <= numargs; i++ )
- {
- argv[i] = (char*) va_arg(args, const char*);
- }
- int result = execv(pathname, argv);
- free(argv);
- return result;
- }
-
- extern "C" int vexeclp(const char* filename, va_list args)
- {
- va_list iter;
- va_copy(iter, args);
- size_t numargs = 0;
- while ( va_arg(iter, const char*) ) { numargs++; }
- va_end(iter);
- char** argv = (char**) malloc(sizeof(char*) * (numargs+1));
- if ( !argv ) { return -1; }
- for ( size_t i = 0; i <= numargs; i++ )
- {
- argv[i] = (char*) va_arg(args, const char*);
- }
- int result = execvp(filename, argv);
- free(argv);
- return result;
- }
-
- extern "C" int vexecle(const char* pathname, va_list args)
- {
- va_list iter;
- va_copy(iter, args);
- size_t numargs = 0;
- while ( va_arg(iter, const char*) ) { numargs++; }
- va_end(iter);
- numargs--; // envp
- char** argv = (char**) malloc(sizeof(char*) * (numargs+1));
- if ( !argv ) { return -1; }
- for ( size_t i = 0; i < numargs; i++ )
- {
- argv[i] = (char*) va_arg(args, const char*);
- }
- argv[numargs] = NULL;
- char* const* envp = va_arg(args, char* const*);
- int result = execve(pathname, argv, envp);
- free(argv);
- return result;
- }
-
- extern "C" int execl(const char* pathname, ...)
- {
- va_list args;
- va_start(args, pathname);
- int result = vexecl(pathname, args);
- va_end(args);
- return result;
- }
-
- extern "C" int execlp(const char* filename, ...)
- {
- va_list args;
- va_start(args, filename);
- int result = vexeclp(filename, args);
- va_end(args);
- return result;
- }
-
- extern "C" int execle(const char* pathname, ...)
- {
- va_list args;
- va_start(args, pathname);
- int result = vexecle(pathname, args);
- va_end(args);
- return result;
- }
-
- extern "C" pid_t tfork(int flags, tforkregs_t* regs)
- {
- return SysTFork(flags, regs);
- }
-
- extern "C" pid_t __call_tfork_with_regs(int flags);
-
- extern "C" pid_t sfork(int flags)
- {
- return __call_tfork_with_regs(flags);
- }
-
- extern "C" pid_t fork()
- {
- return sfork(SFFORK);
- }
-
- extern "C" pid_t getpid()
- {
- return SysGetPID();
- }
-
- extern "C" pid_t getppid()
- {
- return SysGetParentPID();
- }
-
- extern "C" pid_t waitpid(pid_t pid, int* status, int options)
- {
- return SysWait(pid, status, options);
- }
-
- extern "C" pid_t wait(int* status)
- {
- return waitpid(-1, status, 0);
- }
- }
-}
-
diff --git a/libmaxsi/sfork.cpp b/libmaxsi/sfork.cpp
new file mode 100644
index 00000000..d47896e9
--- /dev/null
+++ b/libmaxsi/sfork.cpp
@@ -0,0 +1,32 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ sfork.cpp
+ Create a new task inheriting some properties from the current task.
+
+*******************************************************************************/
+
+#include
+
+extern "C" pid_t __call_tfork_with_regs(int flags);
+
+extern "C" pid_t sfork(int flags)
+{
+ return __call_tfork_with_regs(flags);
+}
diff --git a/libmaxsi/tfork.cpp b/libmaxsi/tfork.cpp
new file mode 100644
index 00000000..7c04e360
--- /dev/null
+++ b/libmaxsi/tfork.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ tfork.cpp
+ Create a new task inheriting some properties from the current task.
+
+*******************************************************************************/
+
+#include
+#include
+
+DEFN_SYSCALL2(pid_t, sys_tfork, SYSCALL_TFORK, int, tforkregs_t*);
+
+extern "C" pid_t tfork(int flags, tforkregs_t* regs)
+{
+ return sys_tfork(flags, regs);
+}
diff --git a/libmaxsi/vexecl.cpp b/libmaxsi/vexecl.cpp
new file mode 100644
index 00000000..4e08040d
--- /dev/null
+++ b/libmaxsi/vexecl.cpp
@@ -0,0 +1,45 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ vexecl.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+extern "C" int vexecl(const char* pathname, va_list args)
+{
+ va_list iter;
+ va_copy(iter, args);
+ size_t numargs = 0;
+ while ( va_arg(iter, const char*) ) { numargs++; }
+ va_end(iter);
+ char** argv = (char**) malloc(sizeof(char*) * (numargs+1));
+ if ( !argv ) { return -1; }
+ for ( size_t i = 0; i <= numargs; i++ )
+ {
+ argv[i] = (char*) va_arg(args, const char*);
+ }
+ int result = execv(pathname, argv);
+ free(argv);
+ return result;
+}
diff --git a/libmaxsi/vexecle.cpp b/libmaxsi/vexecle.cpp
new file mode 100644
index 00000000..043b9e55
--- /dev/null
+++ b/libmaxsi/vexecle.cpp
@@ -0,0 +1,48 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ vexecle.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+extern "C" int vexecle(const char* pathname, va_list args)
+{
+ va_list iter;
+ va_copy(iter, args);
+ size_t numargs = 0;
+ while ( va_arg(iter, const char*) ) { numargs++; }
+ va_end(iter);
+ numargs--; // envp
+ char** argv = (char**) malloc(sizeof(char*) * (numargs+1));
+ if ( !argv ) { return -1; }
+ for ( size_t i = 0; i < numargs; i++ )
+ {
+ argv[i] = (char*) va_arg(args, const char*);
+ }
+ argv[numargs] = NULL;
+ char* const* envp = va_arg(args, char* const*);
+ int result = execve(pathname, argv, envp);
+ free(argv);
+ return result;
+}
diff --git a/libmaxsi/vexeclp.cpp b/libmaxsi/vexeclp.cpp
new file mode 100644
index 00000000..2bd9effc
--- /dev/null
+++ b/libmaxsi/vexeclp.cpp
@@ -0,0 +1,45 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ vexeclp.cpp
+ Loads a process image.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+extern "C" int vexeclp(const char* filename, va_list args)
+{
+ va_list iter;
+ va_copy(iter, args);
+ size_t numargs = 0;
+ while ( va_arg(iter, const char*) ) { numargs++; }
+ va_end(iter);
+ char** argv = (char**) malloc(sizeof(char*) * (numargs+1));
+ if ( !argv ) { return -1; }
+ for ( size_t i = 0; i <= numargs; i++ )
+ {
+ argv[i] = (char*) va_arg(args, const char*);
+ }
+ int result = execvp(filename, argv);
+ free(argv);
+ return result;
+}
diff --git a/libmaxsi/wait.cpp b/libmaxsi/wait.cpp
new file mode 100644
index 00000000..27ccd10e
--- /dev/null
+++ b/libmaxsi/wait.cpp
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ waitpid.cpp
+ Wait for child process.
+
+*******************************************************************************/
+
+#include
+
+extern "C" pid_t wait(int* status)
+{
+ return waitpid(-1, status, 0);
+}
diff --git a/libmaxsi/waitpid.cpp b/libmaxsi/waitpid.cpp
new file mode 100644
index 00000000..33eb3c9d
--- /dev/null
+++ b/libmaxsi/waitpid.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ waitpid.cpp
+ Wait for child process.
+
+*******************************************************************************/
+
+#include
+#include
+
+DEFN_SYSCALL3(pid_t, sys_wait, SYSCALL_WAIT, pid_t, int*, int);
+
+extern "C" pid_t waitpid(pid_t pid, int* status, int options)
+{
+ return sys_wait(pid, status, options);
+}