void my_cd(t_mysh *mysh) { int ret; char *pwd; pwd = my_strdup("OLDPWD="); pwd = my_strcat_free(pwd, getcwd(NULL, 1000)); /* getcwd a free*/ ret = 0; if (comp_str(mysh->tab_com[0], "cd") == 1) { if (mysh->tab_com[1] && mysh->tab_com[1][0] == '-') ret = chdir(src_env(mysh->env, "OLDPWD")); else if (!mysh->tab_com[1]) ret = chdir(src_env(mysh->env, "HOME")); else ret = chdir(mysh->tab_com[1]); if (ret == -1) { my_error("cd: no such file or directory: "); my_error(mysh->tab_com[1]); my_error("\n"); } else update_pwd(mysh, pwd); } free (pwd); }
void my_set_env(t_mysh *mysh) { char *param_in_env; int i; i = 0; while (mysh->tab_com[i]) i++; if (comp_str(mysh->tab_com[0], "setenv") == 1 && mysh->tab_com[1] && i < 4) { if ((param_in_env = src_env(mysh->env, mysh->tab_com[1]))) update_env(mysh); else add_env(mysh); if (param_in_env) free (param_in_env); } else if (comp_str(mysh->tab_com[0], "setenv") == 1 && i == 1) { i = -1; while (mysh->env && mysh->env[++i]) my_printf("%s\n", mysh->env[i]); } else if (comp_str(mysh->tab_com[0], "setenv") == 1 && i >= 4) my_error("setenv: Too many arguments.\n"); }
void update_pwd(t_mysh *mysh, char *pwd) { char *param_in_env; my_printf("%s\n", pwd); if ((param_in_env = src_env(mysh->env, pwd))) update_env_pwd(mysh, pwd); else add_env_pwd(mysh, pwd); if (param_in_env) free (param_in_env); }
int ForStmtTest::run(Env &env, LocalDefs &ienv) { //cout << "Number of tests to perform: " << instrs.size() << endl; Env src_env(env); Term src_seq = src_expr.evaluate(src_env, ienv); assert(src_seq.is_seq()); int len = src_seq.size(); int errors = 0; for (int i=0 ; i < len ; i++) { Env new_env(env); new_env.set(var, src_seq.item(i)); for (unsigned int j=0 ; j < instrs.size() ; j++) errors += instrs[j]->run(new_env, ienv); } return errors; }