commit 9736728d23af42f740fcb217f418e3e8bdd9984d
parent 7d4aef6cfd36c19583fafb7ae49a69c6ce47b680
Author: rsc <rsc>
Date: Fri, 10 Aug 2007 17:00:00 +0000
cleanup main
Diffstat:
M | sh.c | | | 30 | ++++++++++++++++++------------ |
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/sh.c b/sh.c
@@ -29,10 +29,11 @@ struct cmd cmdlist[MAXCMD];
struct cmd *cmd;
char buf[BUFSIZ];
-int debug = 0;
+int debug;
int parse(char *s);
void runcmd(void);
+int getcmd(char *buf, int nbuf);
int ioredirection(struct ionode *iolist, int nio);
int gettoken(char *s, char **token);
int _gettoken(char *s, char **p1, char **p2);
@@ -40,20 +41,25 @@ int _gettoken(char *s, char **p1, char **p2);
int
main(void)
{
- while(1){
- puts("$ ");
- memset(buf, 0, sizeof buf);
- gets(buf, sizeof buf);
- if(buf[0] == 0) // EOF
- break;
- if(parse(buf) < 0)
- continue;
- runcmd();
+ while(getcmd(buf, sizeof buf) >= 0) {
+ if(parse(buf) >= 0)
+ runcmd();
}
exit();
}
int
+getcmd(char *buf, int nbuf)
+{
+ puts("$ ");
+ memset(buf, 0, nbuf);
+ gets(buf, nbuf);
+ if(buf[0] == 0) // EOF
+ return -1;
+ return 0;
+}
+
+int
parse(char *s)
{
char *t;
@@ -61,13 +67,13 @@ parse(char *s)
gettoken(s, 0);
- cmd = &cmdlist[0];;
+ cmd = &cmdlist[0];
for(i = 0; i < MAXCMD; i++) {
cmdlist[i].argc = 0;
cmdlist[i].token = 0;
cmdlist[i].io = cmdlist[i].iolist;
}
- while(1) {
+ for(;;){
switch((c = gettoken(0, &t))) {
case 'w': // Add an argument