Split libmaxsi process.o into multiple files.
This commit is contained in:
parent
838992c3d8
commit
fb91fbbc5c
|
@ -115,21 +115,31 @@ dlfcn.o \
|
||||||
dup.o \
|
dup.o \
|
||||||
env.o \
|
env.o \
|
||||||
errorprint.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 \
|
_Exit.o \
|
||||||
|
exit.o \
|
||||||
fchmod.o \
|
fchmod.o \
|
||||||
fcloseall.o \
|
fcloseall.o \
|
||||||
fcntl.o \
|
fcntl.o \
|
||||||
fddir-sortix.o \
|
fddir-sortix.o \
|
||||||
fdio.o \
|
fdio.o \
|
||||||
fileno.o \
|
fileno.o \
|
||||||
|
fork.o \
|
||||||
fpipe.o \
|
fpipe.o \
|
||||||
fstat.o \
|
fstat.o \
|
||||||
ftruncate.o \
|
ftruncate.o \
|
||||||
getc.o \
|
getc.o \
|
||||||
getcwd.o \
|
getcwd.o \
|
||||||
getdtablesize.o \
|
getdtablesize.o \
|
||||||
|
getpid.o \
|
||||||
|
getppid.o \
|
||||||
gettermmode.o \
|
gettermmode.o \
|
||||||
init.o \
|
init.o \
|
||||||
ioleast.o \
|
ioleast.o \
|
||||||
|
@ -143,7 +153,6 @@ on_exit.o \
|
||||||
open.o \
|
open.o \
|
||||||
pipe.o \
|
pipe.o \
|
||||||
print.o \
|
print.o \
|
||||||
process.o \
|
|
||||||
putc.o \
|
putc.o \
|
||||||
random.o \
|
random.o \
|
||||||
readdirents.o \
|
readdirents.o \
|
||||||
|
@ -153,16 +162,23 @@ scanf.o \
|
||||||
setjmp.o \
|
setjmp.o \
|
||||||
setlocale.o \
|
setlocale.o \
|
||||||
settermmode.o \
|
settermmode.o \
|
||||||
|
sfork.o \
|
||||||
signal.o \
|
signal.o \
|
||||||
sleep.o \
|
sleep.o \
|
||||||
stat.o \
|
stat.o \
|
||||||
stdio.o \
|
stdio.o \
|
||||||
|
tfork.o \
|
||||||
time.o \
|
time.o \
|
||||||
truncate.o \
|
truncate.o \
|
||||||
umask.o \
|
umask.o \
|
||||||
unlink.o \
|
unlink.o \
|
||||||
usleep.o \
|
usleep.o \
|
||||||
|
vexecle.o \
|
||||||
|
vexecl.o \
|
||||||
|
vexeclp.o \
|
||||||
vscanf.o \
|
vscanf.o \
|
||||||
|
wait.o \
|
||||||
|
waitpid.o \
|
||||||
winsize.o \
|
winsize.o \
|
||||||
write.o \
|
write.o \
|
||||||
|
|
||||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execl.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" int execl(const char* pathname, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, pathname);
|
||||||
|
int result = vexecl(pathname, args);
|
||||||
|
va_end(args);
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execlp.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" int execle(const char* pathname, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, pathname);
|
||||||
|
int result = vexecle(pathname, args);
|
||||||
|
va_end(args);
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execlp.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" int execlp(const char* filename, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, filename);
|
||||||
|
int result = vexeclp(filename, args);
|
||||||
|
va_end(args);
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execv.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#define _WANT_ENVIRON
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" int execv(const char* pathname, char* const* argv)
|
||||||
|
{
|
||||||
|
return execve(pathname, argv, environ);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execve.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execvp.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#define _WANT_ENVIRON
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" int execvp(const char* filename, char* const* argv)
|
||||||
|
{
|
||||||
|
return execvpe(filename, argv, environ);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
execvpe.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
fork.cpp
|
||||||
|
Create a new task inheriting some properties from the current task.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" pid_t fork()
|
||||||
|
{
|
||||||
|
return sfork(SFFORK);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
getpid.cpp
|
||||||
|
Get current process id.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
DEFN_SYSCALL0(pid_t, sys_getpid, SYSCALL_GETPID);
|
||||||
|
|
||||||
|
extern "C" pid_t getpid()
|
||||||
|
{
|
||||||
|
return sys_getpid();
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
getpid.cpp
|
||||||
|
Get parent process id.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
DEFN_SYSCALL0(pid_t, sys_getppid, SYSCALL_GETPPID);
|
||||||
|
|
||||||
|
extern "C" pid_t getppid()
|
||||||
|
{
|
||||||
|
return sys_getppid();
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
process.cpp
|
|
||||||
Exposes system calls for process creation and management.
|
|
||||||
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#define _WANT_ENVIRON
|
|
||||||
#include <sys/syscall.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
sfork.cpp
|
||||||
|
Create a new task inheriting some properties from the current task.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" pid_t __call_tfork_with_regs(int flags);
|
||||||
|
|
||||||
|
extern "C" pid_t sfork(int flags)
|
||||||
|
{
|
||||||
|
return __call_tfork_with_regs(flags);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
tfork.cpp
|
||||||
|
Create a new task inheriting some properties from the current task.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
vexecl.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
vexecle.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
vexeclp.cpp
|
||||||
|
Loads a process image.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
waitpid.cpp
|
||||||
|
Wait for child process.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
extern "C" pid_t wait(int* status)
|
||||||
|
{
|
||||||
|
return waitpid(-1, status, 0);
|
||||||
|
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
waitpid.cpp
|
||||||
|
Wait for child process.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
Loading…
Reference in New Issue