git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git]
/
lunaix-os
/
usr
/
sh
/
sh.c
diff --git
a/lunaix-os/usr/sh/sh.c
b/lunaix-os/usr/sh/sh.c
index c2c8347f3f7d6969fd03f838b7b5607dadbe0e7e..33f0b030b1372b860afff9b8cda068d8ef59b5fe 100644
(file)
--- a/
lunaix-os/usr/sh/sh.c
+++ b/
lunaix-os/usr/sh/sh.c
@@
-113,6
+113,7
@@
sigint_handle(int signum)
void
sh_exec(const char** argv)
{
void
sh_exec(const char** argv)
{
+ static int prev_exit;
const char* envp[] = { 0 };
char* name = argv[0];
if (!strcmp(name, "cd")) {
const char* envp[] = { 0 };
char* name = argv[0];
if (!strcmp(name, "cd")) {
@@
-121,15
+122,27
@@
sh_exec(const char** argv)
return;
}
return;
}
+ if (!strcmp(name, "?")) {
+ printf("%d\n", prev_exit);
+ return;
+ }
+
+ char buffer[1024];
+ strcpy(buffer, "/usr/bin/");
+ strcpy(&buffer[9], name);
+
pid_t p;
pid_t p;
+ int res;
if (!(p = fork())) {
if (!(p = fork())) {
- if (execve(
name
, argv, envp)) {
+ if (execve(
buffer
, argv, envp)) {
sh_printerr();
}
_exit(1);
}
setpgid(p, getpgid());
sh_printerr();
}
_exit(1);
}
setpgid(p, getpgid());
- waitpid(p, NULL, 0);
+ waitpid(p, &res, 0);
+
+ prev_exit = WEXITSTATUS(res);
}
static char*
}
static char*