/* ** Builtin env */ void env(char **my_env, char **cmd) { int tabsize; int nb; char **new_env; int i; tabsize = my_tab_size(cmd); if (tabsize < 2) { my_show_to_wordtab(my_env); } else { i = 1; nb = count_value(cmd); new_env = get_my_env(my_env); while (i <= nb) { new_env = exec_setenv(new_env, cmd[i]); i++; } cmd = cmd + nb + 1; if (*cmd != 0) exec_cmd(cmd, new_env); } }
static int cd_home(t_env **env) { t_env *tmp; char *pwd; tmp = *env; if ((pwd = malloc(sizeof(char) * PWD_SIZE)) == NULL) return (my_perror(QUIT_ERR, QUIT_RET)); if (exec_setenv("OLDPWD", getcwd(pwd, PWD_SIZE), env) == QUIT_RET) return (QUIT_RET); while (tmp != NULL && my_strcmp("HOME", tmp->key) != 0) tmp = tmp->next; if (tmp == NULL) chdir("/"); else if (chdir(tmp->value) == -1) write(2, CD_FAILED, my_strlen(CD_FAILED)); else if (change_pwd_env(env, "PWD") == QUIT_RET) return (QUIT_RET); return (EXIT_SUCCESS); }
int exec_execve(t_tree *tree, t_env **env) { t_env *tmp_env; char *cmd; tmp_env = *env; while (tmp_env != NULL && my_strcmp(tmp_env->key, "PATH") != 0) tmp_env = tmp_env->next; if (tmp_env == NULL || tmp_env->value == NULL) { if (exec_setenv("PATH", DEFAULT_PATH, env) == QUIT_RET) return (QUIT_RET); return (exec_execve(tree, env)); } if ((cmd = check_access(tree, tmp_env)) == NULL) { write(2, tree->lexer->content, my_strlen(tree->lexer->content)); write(2, ACCESS_ERR, my_strlen(ACCESS_ERR)); return (EXIT_FAILURE); } return (use_execve(tree, env, cmd)); }
int change_pwd_env(t_env **env, char *key) { t_env *tmp; char *pwd; tmp = *env; pwd = NULL; while (tmp != NULL && my_strcmp(tmp->key, key) != 0) tmp = tmp->next; if (tmp == NULL) { if ((pwd = malloc(sizeof(char) * PWD_SIZE)) == NULL) return (my_perror(QUIT_ERR, QUIT_RET)); if (exec_setenv(key, getcwd(pwd, PWD_SIZE), env) == QUIT_RET) return (QUIT_RET); free(pwd); return (change_pwd_env(env, key)); } free(tmp->value); if ((tmp->value = malloc(sizeof(char) * PWD_SIZE)) == NULL) return (my_perror(QUIT_ERR, QUIT_RET)); getcwd(tmp->value, PWD_SIZE); return (EXIT_SUCCESS); }