cmd 28 user/sh.c struct cmd *cmd; cmd 37 user/sh.c struct cmd *left; cmd 38 user/sh.c struct cmd *right; cmd 43 user/sh.c struct cmd *left; cmd 44 user/sh.c struct cmd *right; cmd 49 user/sh.c struct cmd *cmd; cmd 54 user/sh.c struct cmd *parsecmd(char*); cmd 55 user/sh.c void runcmd(struct cmd*) __attribute__((noreturn)); cmd 59 user/sh.c runcmd(struct cmd *cmd) cmd 68 user/sh.c if(cmd == 0) cmd 71 user/sh.c switch(cmd->type){ cmd 76 user/sh.c ecmd = (struct execcmd*)cmd; cmd 84 user/sh.c rcmd = (struct redircmd*)cmd; cmd 90 user/sh.c runcmd(rcmd->cmd); cmd 94 user/sh.c lcmd = (struct listcmd*)cmd; cmd 102 user/sh.c pcmd = (struct pipecmd*)cmd; cmd 126 user/sh.c bcmd = (struct backcmd*)cmd; cmd 128 user/sh.c runcmd(bcmd->cmd); cmd 161 user/sh.c char *cmd = buf; cmd 162 user/sh.c while (*cmd == ' ' || *cmd == '\t') cmd 163 user/sh.c cmd++; cmd 164 user/sh.c if (*cmd == '\n') // is a blank command cmd 166 user/sh.c if(cmd[0] == 'c' && cmd[1] == 'd' && cmd[2] == ' '){ cmd 168 user/sh.c cmd[strlen(cmd)-1] = 0; // chop \n cmd 169 user/sh.c if(chdir(cmd+3) < 0) cmd 170 user/sh.c fprintf(2, "cannot cd %s\n", cmd+3); cmd 173 user/sh.c runcmd(parsecmd(cmd)); cmd 201 user/sh.c struct cmd* cmd 204 user/sh.c struct execcmd *cmd; cmd 206 user/sh.c cmd = malloc(sizeof(*cmd)); cmd 207 user/sh.c memset(cmd, 0, sizeof(*cmd)); cmd 208 user/sh.c cmd->type = EXEC; cmd 209 user/sh.c return (struct cmd*)cmd; cmd 212 user/sh.c struct cmd* cmd 213 user/sh.c redircmd(struct cmd *subcmd, char *file, char *efile, int mode, int fd) cmd 215 user/sh.c struct redircmd *cmd; cmd 217 user/sh.c cmd = malloc(sizeof(*cmd)); cmd 218 user/sh.c memset(cmd, 0, sizeof(*cmd)); cmd 219 user/sh.c cmd->type = REDIR; cmd 220 user/sh.c cmd->cmd = subcmd; cmd 221 user/sh.c cmd->file = file; cmd 222 user/sh.c cmd->efile = efile; cmd 223 user/sh.c cmd->mode = mode; cmd 224 user/sh.c cmd->fd = fd; cmd 225 user/sh.c return (struct cmd*)cmd; cmd 228 user/sh.c struct cmd* cmd 229 user/sh.c pipecmd(struct cmd *left, struct cmd *right) cmd 231 user/sh.c struct pipecmd *cmd; cmd 233 user/sh.c cmd = malloc(sizeof(*cmd)); cmd 234 user/sh.c memset(cmd, 0, sizeof(*cmd)); cmd 235 user/sh.c cmd->type = PIPE; cmd 236 user/sh.c cmd->left = left; cmd 237 user/sh.c cmd->right = right; cmd 238 user/sh.c return (struct cmd*)cmd; cmd 241 user/sh.c struct cmd* cmd 242 user/sh.c listcmd(struct cmd *left, struct cmd *right) cmd 244 user/sh.c struct listcmd *cmd; cmd 246 user/sh.c cmd = malloc(sizeof(*cmd)); cmd 247 user/sh.c memset(cmd, 0, sizeof(*cmd)); cmd 248 user/sh.c cmd->type = LIST; cmd 249 user/sh.c cmd->left = left; cmd 250 user/sh.c cmd->right = right; cmd 251 user/sh.c return (struct cmd*)cmd; cmd 254 user/sh.c struct cmd* cmd 255 user/sh.c backcmd(struct cmd *subcmd) cmd 257 user/sh.c struct backcmd *cmd; cmd 259 user/sh.c cmd = malloc(sizeof(*cmd)); cmd 260 user/sh.c memset(cmd, 0, sizeof(*cmd)); cmd 261 user/sh.c cmd->type = BACK; cmd 262 user/sh.c cmd->cmd = subcmd; cmd 263 user/sh.c return (struct cmd*)cmd; cmd 328 user/sh.c struct cmd *parseline(char**, char*); cmd 329 user/sh.c struct cmd *parsepipe(char**, char*); cmd 330 user/sh.c struct cmd *parseexec(char**, char*); cmd 331 user/sh.c struct cmd *nulterminate(struct cmd*); cmd 333 user/sh.c struct cmd* cmd 337 user/sh.c struct cmd *cmd; cmd 340 user/sh.c cmd = parseline(&s, es); cmd 346 user/sh.c nulterminate(cmd); cmd 347 user/sh.c return cmd; cmd 350 user/sh.c struct cmd* cmd 353 user/sh.c struct cmd *cmd; cmd 355 user/sh.c cmd = parsepipe(ps, es); cmd 358 user/sh.c cmd = backcmd(cmd); cmd 362 user/sh.c cmd = listcmd(cmd, parseline(ps, es)); cmd 364 user/sh.c return cmd; cmd 367 user/sh.c struct cmd* cmd 370 user/sh.c struct cmd *cmd; cmd 372 user/sh.c cmd = parseexec(ps, es); cmd 375 user/sh.c cmd = pipecmd(cmd, parsepipe(ps, es)); cmd 377 user/sh.c return cmd; cmd 380 user/sh.c struct cmd* cmd 381 user/sh.c parseredirs(struct cmd *cmd, char **ps, char *es) cmd 392 user/sh.c cmd = redircmd(cmd, q, eq, O_RDONLY, 0); cmd 395 user/sh.c cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE|O_TRUNC, 1); cmd 398 user/sh.c cmd = redircmd(cmd, q, eq, O_WRONLY|O_CREATE, 1); cmd 402 user/sh.c return cmd; cmd 405 user/sh.c struct cmd* cmd 408 user/sh.c struct cmd *cmd; cmd 413 user/sh.c cmd = parseline(ps, es); cmd 417 user/sh.c cmd = parseredirs(cmd, ps, es); cmd 418 user/sh.c return cmd; cmd 421 user/sh.c struct cmd* cmd 426 user/sh.c struct execcmd *cmd; cmd 427 user/sh.c struct cmd *ret; cmd 433 user/sh.c cmd = (struct execcmd*)ret; cmd 442 user/sh.c cmd->argv[argc] = q; cmd 443 user/sh.c cmd->eargv[argc] = eq; cmd 449 user/sh.c cmd->argv[argc] = 0; cmd 450 user/sh.c cmd->eargv[argc] = 0; cmd 455 user/sh.c struct cmd* cmd 456 user/sh.c nulterminate(struct cmd *cmd) cmd 465 user/sh.c if(cmd == 0) cmd 468 user/sh.c switch(cmd->type){ cmd 470 user/sh.c ecmd = (struct execcmd*)cmd; cmd 476 user/sh.c rcmd = (struct redircmd*)cmd; cmd 477 user/sh.c nulterminate(rcmd->cmd); cmd 482 user/sh.c pcmd = (struct pipecmd*)cmd; cmd 488 user/sh.c lcmd = (struct listcmd*)cmd; cmd 494 user/sh.c bcmd = (struct backcmd*)cmd; cmd 495 user/sh.c nulterminate(bcmd->cmd); cmd 498 user/sh.c return cmd;