diff options
author | Alex AUVOLAT <alexis211@gmail.com> | 2012-05-20 16:34:27 +0200 |
---|---|---|
committer | Alex AUVOLAT <alexis211@gmail.com> | 2012-05-20 16:34:27 +0200 |
commit | 7fde5e61bc7047433bfc1f47229b72d0ccd302e7 (patch) | |
tree | 7228e9008ecffa85100ac31ee5063edc62abf41e /src/user/app/yosh/main.cpp | |
parent | c57a919d019606c7d83fea574159f542e431c199 (diff) | |
download | TCE-7fde5e61bc7047433bfc1f47229b72d0ccd302e7.tar.gz TCE-7fde5e61bc7047433bfc1f47229b72d0ccd302e7.zip |
Correected some nasty tasking bugs. Still not perfect.
Diffstat (limited to 'src/user/app/yosh/main.cpp')
-rw-r--r-- | src/user/app/yosh/main.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/user/app/yosh/main.cpp b/src/user/app/yosh/main.cpp index fc9580c..160e728 100644 --- a/src/user/app/yosh/main.cpp +++ b/src/user/app/yosh/main.cpp @@ -167,8 +167,21 @@ int Main(String *sh_args) { } while (1) { - stdio.printf("\x1b[33m %s \x1b[1m", cwd.c_str()); + // check for background processes that may have finished + int p = 0; + while (p < bg_pr_c) { + int ret = libc::waitpid(bg_pr[p], 0); + if (ret != E_NOT_FINISHED) { + stdio.printf("(yosh) child (pid %i) exited with status %i\n", bg_pr[p], ret); + bg_pr_c--; + bg_pr[p] = bg_pr[bg_pr_c]; + } else { + p++; + } + } + // show prompt + stdio.printf("\x1b[33m %s \x1b[1m", cwd.c_str()); String s = term->readline(); stdio.printf("\x1b[0m"); if (s.size() == 0) continue; @@ -252,18 +265,6 @@ int Main(String *sh_args) { } } } - - int i = 0; - while (i < bg_pr_c) { - int ret = libc::waitpid(bg_pr[i], 0); - if (ret != E_NOT_FINISHED) { - stdio.printf("(yosh) child (pid %i) exited with status %i\n", bg_pr[i], ret); - bg_pr_c--; - bg_pr[i] = bg_pr[bg_pr_c]; - } else { - i++; - } - } } return 0; |