mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 00:57:45 +00:00
LibC: Tweak execvp() and execve() prototypes.
This commit is contained in:
parent
1483af406f
commit
8d36c8f0d8
3 changed files with 23 additions and 23 deletions
|
@ -18,13 +18,13 @@ pid_t fork()
|
||||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int execve(const char* filename, const char** argv, const char** envp)
|
int execve(const char* filename, char* const argv[], char* const envp[])
|
||||||
{
|
{
|
||||||
int rc = syscall(SC_execve, filename, argv, envp);
|
int rc = syscall(SC_execve, filename, argv, envp);
|
||||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int execvp(const char* filename, const char** argv)
|
int execvp(const char* filename, char* const argv[])
|
||||||
{
|
{
|
||||||
return execve(filename, argv, nullptr);
|
return execve(filename, argv, nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,8 @@ extern char** environ;
|
||||||
|
|
||||||
inline int getpagesize() { return 4096; }
|
inline int getpagesize() { return 4096; }
|
||||||
pid_t fork();
|
pid_t fork();
|
||||||
int execve(const char* filename, const char** argv, const char** envp);
|
int execve(const char* filename, char* const argv[], char* const envp[]);
|
||||||
int execvp(const char* filename, const char** argv);
|
int execvp(const char* filename, char* const argv[]);
|
||||||
void sync();
|
void sync();
|
||||||
void _exit(int status);
|
void _exit(int status);
|
||||||
pid_t getsid(pid_t);
|
pid_t getsid(pid_t);
|
||||||
|
|
|
@ -31,7 +31,7 @@ static void prompt()
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_pwd(int, const char**)
|
static int sh_pwd(int, char**)
|
||||||
{
|
{
|
||||||
printf("%s\n", g->cwd.characters());
|
printf("%s\n", g->cwd.characters());
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -50,7 +50,7 @@ void handle_sigint(int)
|
||||||
printf("Interrupt received by sh\n");
|
printf("Interrupt received by sh\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_busy(int, const char**)
|
static int sh_busy(int, char**)
|
||||||
{
|
{
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
sa.sa_handler = did_receive_signal;
|
sa.sa_handler = did_receive_signal;
|
||||||
|
@ -70,40 +70,40 @@ static int sh_busy(int, const char**)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_fork(int, const char**)
|
static int sh_fork(int, char**)
|
||||||
{
|
{
|
||||||
pid_t pid = fork();
|
pid_t pid = fork();
|
||||||
printf("getpid()=%d, fork()=%d\n", getpid(), pid);
|
printf("getpid()=%d, fork()=%d\n", getpid(), pid);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_fe(int, const char**)
|
static int sh_fe(int, char**)
|
||||||
{
|
{
|
||||||
pid_t pid = fork();
|
pid_t pid = fork();
|
||||||
if (!pid) {
|
if (!pid) {
|
||||||
int rc = execve("/bin/ps", nullptr, nullptr);
|
int rc = execvp("/bin/ps", nullptr);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
perror("execve");
|
perror("execvp");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_fef(int, const char**)
|
static int sh_fef(int, char**)
|
||||||
{
|
{
|
||||||
pid_t pid = fork();
|
pid_t pid = fork();
|
||||||
if (!pid) {
|
if (!pid) {
|
||||||
int rc = execve("/bin/psx", nullptr, nullptr);
|
int rc = execvp("/bin/psx", nullptr);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
perror("execve");
|
perror("execvp");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_wt(int, const char**)
|
static int sh_wt(int, char**)
|
||||||
{
|
{
|
||||||
const char* rodata_ptr = "foo";
|
const char* rodata_ptr = "foo";
|
||||||
printf("Writing to rodata=%p...\n", rodata_ptr);
|
printf("Writing to rodata=%p...\n", rodata_ptr);
|
||||||
|
@ -115,7 +115,7 @@ static int sh_wt(int, const char**)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_mf(int, const char**)
|
static int sh_mf(int, char**)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
int fd = open("/Banner.txt", O_RDONLY);
|
int fd = open("/Banner.txt", O_RDONLY);
|
||||||
|
@ -141,7 +141,7 @@ close_it:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_mp(int, const char**)
|
static int sh_mp(int, char**)
|
||||||
{
|
{
|
||||||
int fd = open("/kernel.map", O_RDONLY);
|
int fd = open("/kernel.map", O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
@ -161,14 +161,14 @@ static int sh_mp(int, const char**)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_exit(int, const char**)
|
static int sh_exit(int, char**)
|
||||||
{
|
{
|
||||||
printf("Good-bye!\n");
|
printf("Good-bye!\n");
|
||||||
exit(0);
|
exit(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sh_cd(int argc, const char** argv)
|
static int sh_cd(int argc, char** argv)
|
||||||
{
|
{
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
printf("usage: cd <path>\n");
|
printf("usage: cd <path>\n");
|
||||||
|
@ -207,7 +207,7 @@ static int sh_cd(int argc, const char** argv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool handle_builtin(int argc, const char** argv, int& retval)
|
static bool handle_builtin(int argc, char** argv, int& retval)
|
||||||
{
|
{
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -254,15 +254,15 @@ static bool handle_builtin(int argc, const char** argv, int& retval)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int try_exec(const char* path, const char** argv)
|
static int try_exec(const char* path, char** argv)
|
||||||
{
|
{
|
||||||
int ret = execve(path, argv, const_cast<const char**>(environ));
|
int ret = execve(path, argv, environ);
|
||||||
assert(ret < 0);
|
assert(ret < 0);
|
||||||
|
|
||||||
const char* search_path = "/bin";
|
const char* search_path = "/bin";
|
||||||
char pathbuf[128];
|
char pathbuf[128];
|
||||||
sprintf(pathbuf, "%s/%s", search_path, argv[0]);
|
sprintf(pathbuf, "%s/%s", search_path, argv[0]);
|
||||||
ret = execve(pathbuf, argv, const_cast<const char**>(environ));
|
ret = execve(pathbuf, argv, environ);
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
return -1;
|
return -1;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -275,7 +275,7 @@ static int runcmd(char* cmd)
|
||||||
char buf[128];
|
char buf[128];
|
||||||
memcpy(buf, cmd, 128);
|
memcpy(buf, cmd, 128);
|
||||||
|
|
||||||
const char* argv[32];
|
char* argv[32];
|
||||||
size_t argc = 1;
|
size_t argc = 1;
|
||||||
argv[0] = &buf[0];
|
argv[0] = &buf[0];
|
||||||
size_t buflen = strlen(buf);
|
size_t buflen = strlen(buf);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue