Split libmaxsi process.o into multiple files.
This commit is contained in:
parent
838992c3d8
commit
fb91fbbc5c
19 changed files with 625 additions and 201 deletions
|
@ -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 \
|
||||
|
||||
|
|
35
libmaxsi/execl.cpp
Normal file
35
libmaxsi/execl.cpp
Normal file
|
@ -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;
|
||||
}
|
35
libmaxsi/execle.cpp
Normal file
35
libmaxsi/execle.cpp
Normal file
|
@ -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;
|
||||
}
|
35
libmaxsi/execlp.cpp
Normal file
35
libmaxsi/execlp.cpp
Normal file
|
@ -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;
|
||||
}
|
31
libmaxsi/execv.cpp
Normal file
31
libmaxsi/execv.cpp
Normal file
|
@ -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);
|
||||
}
|
34
libmaxsi/execve.cpp
Normal file
34
libmaxsi/execve.cpp
Normal file
|
@ -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);
|
||||
}
|
31
libmaxsi/execvp.cpp
Normal file
31
libmaxsi/execvp.cpp
Normal file
|
@ -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);
|
||||
}
|
44
libmaxsi/execvpe.cpp
Normal file
44
libmaxsi/execvpe.cpp
Normal file
|
@ -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;
|
||||
}
|
30
libmaxsi/fork.cpp
Normal file
30
libmaxsi/fork.cpp
Normal file
|
@ -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);
|
||||
}
|
33
libmaxsi/getpid.cpp
Normal file
33
libmaxsi/getpid.cpp
Normal file
|
@ -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();
|
||||
}
|
33
libmaxsi/getppid.cpp
Normal file
33
libmaxsi/getppid.cpp
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
32
libmaxsi/sfork.cpp
Normal file
32
libmaxsi/sfork.cpp
Normal file
|
@ -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);
|
||||
}
|
33
libmaxsi/tfork.cpp
Normal file
33
libmaxsi/tfork.cpp
Normal file
|
@ -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);
|
||||
}
|
45
libmaxsi/vexecl.cpp
Normal file
45
libmaxsi/vexecl.cpp
Normal file
|
@ -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;
|
||||
}
|
48
libmaxsi/vexecle.cpp
Normal file
48
libmaxsi/vexecle.cpp
Normal file
|
@ -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;
|
||||
}
|
45
libmaxsi/vexeclp.cpp
Normal file
45
libmaxsi/vexeclp.cpp
Normal file
|
@ -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;
|
||||
}
|
30
libmaxsi/wait.cpp
Normal file
30
libmaxsi/wait.cpp
Normal file
|
@ -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);
|
||||
}
|
33
libmaxsi/waitpid.cpp
Normal file
33
libmaxsi/waitpid.cpp
Normal file
|
@ -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 a new issue